• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Streaming

4 mensagens neste tópico

Hy.. a minha primeira dúvida de muitas aqui na secção Java.

Estive a aprender os básicos de java hoje(ontem visto já serem 3 da manhã e continuar a martelar nisto) e fiquei com esta dúvida.

Tenho um ficheiro chamado

tiago.txt que contém um texto do género" Pois é, Java é potente mas puxa pela cabeça, mas não faz mal, se não souber serei apenas mais um cromo na sociedade".

Ora se eu usar isto :

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class CopyBytes{
    public static void main(String[] args) throws IOException{
        FileInputStream in = null;
        FileOutputStream out = null;
        
        try{
        
        in = new FileInputStream("tiago.txt");
        
        out = new FileOutputStream("major.txt");
    
        int c;
        
        while((c = in.read()) != -1) {
        
        out.write(c);
        }
        
        }
        
        finaly {
        if(in !=null){
        in.close();
        }
        if (out !=null) {
        out.close();
        
        }
}
}
}

Porque e que dizem que visto isto ter caracteres não é a melhor forma de fazer ?

dizem que com o FileReader e FileWriter é melhor visto conter char..

Outra coisa, agora perguntas newbies..

o que faz o throw ali no main...?

O que é finally ?

Alguem me explica esta parte ?

      finaly {

        if(in !=null){

        in.close();

        }

        if (out !=null) {

        out.close();

       

        }

Obrigado :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hy.. a minha primeira dúvida de muitas aqui na secção Java.

Estive a aprender os básicos de java hoje(ontem visto já serem 3 da manhã e continuar a martelar nisto) e fiquei com esta dúvida.

Tenho um ficheiro chamado

tiago.txt que contém um texto do género" Pois é, Java é potente mas puxa pela cabeça, mas não faz mal, se não souber serei apenas mais um cromo na sociedade".

Ora se eu usar isto :

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class CopyBytes{
    public static void main(String[] args) throws IOException{
        FileInputStream in = null;
        FileOutputStream out = null;
        
        try{
        
        in = new FileInputStream("tiago.txt");
        
        out = new FileOutputStream("major.txt");
    
        int c;
        
        while((c = in.read()) != -1) {
        
        out.write(c);
        }
        
        }
        
        finaly {
        if(in !=null){
        in.close();
        }
        if (out !=null) {
        out.close();
        
        }
}
}
}

Porque e que dizem que visto isto ter caracteres não é a melhor forma de fazer ?

dizem que com o FileReader e FileWriter é melhor visto conter char..

Isso tem a ver com o tipo de dados que estás a trabalhar, nada mais.

Outra coisa, agora perguntas newbies..

o que faz o throw ali no main...?

O throws quer dizer que essa classe pode dar as excepções que se seguem, neste caso apenas  IOException.

O que é finally ?

Alguem me explica esta parte ?

      finaly {

        if(in !=null){

        in.close();

        }

        if (out !=null) {

        out.close();

       

        }

Obrigado :cheesygrin:

O finally é a última clausula do try e garante que, independentemente do sucesso ou insucesso do código que está na cláusula try, o código que está em finally é executado, neste caso particular isso garante que o acesso aos ficheiros é sempore terminado da forma correcta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No caso dos 'readers' é uma questão de facilidade. No teu código está a ler bytes e no entanto sabes que o ficheiro tem caracteres, porque é que não lês logo um linha inteira, por exemplo? Para isso tens de usar a stream correcta, em java cada tipo de dados tem uma stream associada.

O "throws" neste caso não faz coisa alguma, mas como os métodos associados a streams lançam excepções do tipo que o programador é obrigado a apanhar o facto de teres a clausula "throws" evita que tenhas de apanhar as excepções lançadas pelo código dentro do "finaly". O que acontece é que se o programa estoirar a excepção é lançada para o método que invocou o 'main', neste caso é lançada para a máquina virtual que depois a envia para a consola.

O "finaly" é SEMPRE executado mesmo que tenha sido lançada uma excepção no código dentro do "try". Isto faz com que te seja possível tentar fechar as streams que abriste. Repara que nada garante que as streams sejam fechadas mas pelo menos tu tentaste e se algo aconteceu então o problema já não é desse pedaço de código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma pequena variante que uso no caso de blocos "try-catch" com streams

try {
    //tratar as streams
} catch(/*Excepção a apanhar*/) {
   //tratamento de erros
} finaly {
   if(/*stream existe*/)
     try {
        //fechar stream
     } catch(/*Excepção de erro ao fechar a stream*/) {}

Neste caso mantenho a excpção que o fecho das streams pode lançar dentro do código  de tratamento de streams e não propago a excepção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora