Olá pessoal, depois de muito tempo sem conteúdo a CodeShare está de volta!!! A partir de agora como o time de autores da CodeShare está maior, a frequência de novos conteúdos irá aumentar bastante e iremos falar sobre diversos assuntos e tecnologias, então fique ligado!!!
Para maioria dos desenvolvedores Java, é uma dor de cabeça só de pensar que será necessário fazer uma operação de entrada e saída de dados, principalmente quando estamos trabalhando com arquivos binários. Esse material tem objetivo ser um guia para facilitar essas operações.
Para esse processo iremos utilizar de duas classes abstratas, InputStream
e OutputStream
, e também utilizaremos de uma de suas classes concretas, FileInputStream
e FileOutputStream
, essas classes são classes para trabalhar com arquivos binários, senão for o caso podemos utilizar de classes mais alto nível que manipulam texto.
A seguir temos um exemplo onde realizamos o processo de leitura de um arquivo em disco e escrevemos ele num arquivo de saída, assim replicando seu conteúdo.
InputStream inputStream = new FileInputStream("in.txt");
OutputStream outputStream = new FileOutputStream("out.txt");
byte[] buffer = new byte[1024];
int numBytesDentroBuffer = 0;
while((numBytesDentroBuffer = inputStream.read(buffer))!= -1){
outputStream.write(buffer,0,numBytesDentroBuffer);
}
inputStream.close();
outputStream.close();
Na linha abaixo:
InputStream inputStream = new FileInputStream("in.txt");
Criamos um inputStream
para o arquivo in.txt
para realizarmos sua leitura. Já na linha:
OutputStream outputStream = new FileOutputStream("out.txt");
Criamos um outputStream
para a gravação do arquivo. O segredo se encontra nas próximas linhas:
while((numBytesDentroBuffer = inputStream.read(buffer))!= -1)
Nessa linha o método inputStream.read(buffer)
lê pedaço do arquivo e armazena dentro do array buffer
e retorna a quantidade de bytes lidos que são atribuídos a variável numBytesDentroBuffer
. Isso se repete enquanto o arquivo não é totalmente lido, quando isso acontece é retornado o valor -1
.
Dentro do while
temos o processo de escrita dos buffer lidos:
outputStream.write(buffer,0,numBytesDentroBuffer);
O método acima recebe 3 parâmetros:
- O primeiro paramêtro é o array com o conteúdo lido durante o laço de repetição
- O segundo é de onde será iniciada a escrita com o conteúdo do array, ou seja, o offset.
- Já o terceiro argumento contém a quantidade de bytes para serem escrito no
outputStream
durante a interação dowhile
.
As demais linhas são apenas para fecharem os streams abertos, já que são recursos caros para continuarem abertos sem nenhuma utilidade.
Assim como falado anteriormente, as classes InputStream
e OutputStream
tem outras implementações. Exemplos delas são ByteArrayInputStream
utilizada para trabalhar diretamente com bytes, temos a FileInputStream
para arquivos e também a ObjectInputStream
para objetos serializados.
Anteriormente realizamos o processo de leitura e escrita manipulando byte a byte. Porém temos opções de classes melhores para facilitar nossa vida quando se trata da manipulação de textos.
Para isso utilizaremos a classe BufferedReader
, que por sua vez necessita receber um objeto Reader como argumento de seu construtor.
File file = new File("in.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String texto;
while((texto = bufferedReader.readLine())!= null){
System.out.println(texto);
}
No trecho while((texto = bufferedReader.readLine())!= null){
o bufferedReader
realiza a leitura de uma linha, se houver a retorna para nossa variável texto que é impressa na saída do terminal logo em seguida, e esse laço será repetido até quando não houver mais linhas para serem lidas, tendo assim o retorno de null
dado pelo bufferedReader.readLine()
.
No processo de escrita temos a classe BufferedWriter
, que recebe um Writer como parâmetro em seu construtor.
File file = new File("in.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String texto;
File file2 = new File("out.txt");
FileWriter fileWriter = new FileWriter(file2);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
while((texto = bufferedReader.readLine())!= null){
bufferedWriter.write(texto);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
O método bufferedWriter.write(texto);
realiza a escrita da string
passada por parâmetro, algo para se observar é que temos que indicar para o bufferedWriter
que queremos uma nova linha através do método newLine();
, caso contrário a escrita será realizada em apenas uma linha.
Esse é o primeiro de muitos posts sobre Java que vamos ter aqui na CodeShare!!! Espero que tenham gostado! Até o próximo artigo!!!