Jump to content

Streaming


Gurzi

Recommended Posts

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 😁

Link to comment
Share on other 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 😁

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.