Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Desafio do professor e dúvida na quebra de linha

Realizei o desafio do professor de usar tanto a leitura, quanto a escrita em um projeto e ficou dessa forma:

package br.com.alura.java.io.teste;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class ReadAndWriter{

    private String pathFileRead;
    private String pathFileWriter;


    /*
     * Construtor que recebe o caminho do arquivo que será lido e do arquivo que será escrito, 
     * guardando os valoes nos atríbutos locais.
     *
     */

    public ReadAndWriter(String pathFileRead, String pathFileWriter ) {
        this.pathFileRead = new String(pathFileRead);
        this.pathFileWriter = new String(pathFileWriter);
    }


    /* Método que após já instanciado o objeto pelo construtor com os valores,
     * pode usar esses valores para fazer a cópia do leitor pro escritor.
     */

    public void sendReading() throws IOException {

    // Criando a leitura do arquivo

        InputStream fis = new FileInputStream(pathFileRead);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);

    // Criando a escrita do arquivo

        OutputStream os = new FileOutputStream(pathFileWriter);
        OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bw = new BufferedWriter(osw);



    // Variável que captura os caracteres do Buffered br e usa o readLine para junta-los em uma linha

        String linha = br.readLine();


    // Laço para que todas as linhas sejam percorridas e passadas para o escritor

        while(linha != null) {
            bw.write(linha);
            bw.newLine();
            linha = br.readLine();
        }

        br.close();
        bw.close();
    }

}

Executando:

package br.com.alura.java.io.teste;

import java.io.IOException;

public class TestarDesafio {

    public static void main(String[] args) throws IOException {

        ReadAndWriter transferer = new ReadAndWriter("C:\\Users\\rafael.lima\\Documents\\lorem.txt", "lorem2.txt");

        transferer.sendReading();
    }

}

Minha dúvida que ficou é apenas se há como quebrar linhas a partir de um tio BufferedReader como o newLine(); do BufferedWriter.

(O desafio compilou e funcionou como o esperado)

1 resposta
solução!

Olá Rafael, tudo bem com você?

Muito legal a sua solução, achei muito legal como você quebrou a solução em funções, isso facilita bastante a manutenção do código!

Quanto à sua dúvida, nós temos dois tipos de classe quando mexemos com entrada e saída de dados: os Readers (leitores) e os Writers (escritores), que se encarregam apenas daquilo que o nome já diz. Ou seja, o BufferedReader se trata de um leitor, quanto o BuferredWriter um escritor.

Sendo assim, a única classe dentre essas que tem o poder de quebrar linhas é o escritor, pois é quem faz alterações no fluxo de saída, que no caso é um arquivo. O Reader vai apenas ler as informações de um fluxo, como elas são: todos os caracteres (incluindo os invisíveis, como o de quebra de linha). As classes com o comportamento de quebrar linhas são os Writers!

Para se aprofundar mais, recomendo a leitura da documentação da classe BufferedReader e da classe BufferedWriter, escritas pela Oracle, a empresa responsável por manter a linguagem Java. As documentações estão em inglês, mas caso seja necessário você pode utilizar a função de tradução do seu navegador para ajudar na compreensão.

Fico à disposição em caso de dúvidas.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software