Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

BufferedWrite

Olá boa noite. Não estou conseguindo implementar a aquisição de dados com o teclado, e gravando em um arquivo.txt com o buffered write. Recebendo os dados de um arquivo, funciona. Do teclado não. Segue o código:

public class ReaderSystem {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        Scanner scanner = new Scanner(System.in);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("leitura.txt")));
        //
        OutputStream os = new FileOutputStream("saida.txt");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(os);
        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        //
        String textString = bufferedReader.readLine();
        String scannerString;
        while (scanner.hasNextLine()) {
            scannerString = scanner.nextLine();
            System.out.println(scannerString);
            bufferedWriter.write(scannerString);
            bufferedWriter.newLine();

        }
        scanner.close();
        bufferedWriter.close();

    }

}
8 respostas

Olá Rafael!

Eu utilizei o PrintStream e deu certo.

public class TesteScanner {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);

        PrintStream pt = new PrintStream("saida.txt");

        String scannerString;
        while (scanner.hasNextLine()) {
            scannerString = scanner.nextLine();
            System.out.println(scannerString);
            pt.append(scannerString+"\n");

        }
        scanner.close();
        pt.close();

        }
    }

Então Filipi. Com o PrintStream eu não tentei. Mas gostaria de saber, o porque do BufferedWrite não ser possível. Lendo de um arquivo da certinho. Lendo do teclado, não funciona e gostaria de saber o porque?

Rafael eu tenho esse método aqui pronto pra grava em TXT. Foi de um projetinho que eu fiz. O método recebe um conjunto(Set) e um nome do arquivo a ser gerado.

public void gravar(Set conjunto, String nomeArq) { File fArquivo = null; FileWriter fwArquivo = null; BufferedWriter bw = null;

try { fArquivo = new File(nomeArq + ".txt");

fwArquivo = new FileWriter(fArquivo);

bw = new BufferedWriter(fwArquivo);

for (Produto prod:conjunto) { bw.write(prod.toString() + "\n"); }

bw.close(); fwArquivo.close(); } catch (Exception e) { System.err.println("Erro ao inserir linhas no arquivo: " + fArquivo); } }

public class Dao {

public void gravar(Set conjunto, String nomeArq) { File fArquivo = null; FileWriter fwArquivo = null; BufferedWriter bw = null;

try { fArquivo = new File(nomeArq + ".txt");

fwArquivo = new FileWriter(fArquivo);

bw = new BufferedWriter(fwArquivo);

for (Produto prod:conjunto) { bw.write(prod.toString() + "\n"); }

bw.close(); fwArquivo.close(); } catch (Exception e) { System.err.println("Erro ao inserir linhas no arquivo: " + fArquivo); } }

Não consegui formatar o código aqui... KKKKK

Rafael, neste caso o programa nunca sai do while!

Com o PrintStream da certo, pois a cada nova linha adicionada ele salva ela no arquivo txt, já o bufferdwriter salva somente na hora do close. Vai ser necessário quebrar esse laço quando tu digitar uma palavra chave.

public class ReaderSystem {

    public static void main(String[] args){
        try{
        Scanner scanner = new Scanner(System.in);
        OutputStream os = new FileOutputStream("saida.txt");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(os);
        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        String scannerString;
        while (scanner.hasNextLine()) {
            scannerString = scanner.nextLine();
            System.out.println(scannerString);
            if(scannerString.equals("sair")){
                break;
            }
            bufferedWriter.write(scannerString);
            bufferedWriter.newLine();

        }
        scanner.close();
        bufferedWriter.close();

        }catch(Exception e){
            System.out.println(e.getStackTrace());
        }
    }

}

Desculpa a demora, acabei de achar o erro.

solução!

Rafael, o while termina sim, pois o comando hasNextLine lê o arquivo linha por linha até chegar o seu fim e para. Acho que o problema não foi esse, mas uma outra solução usando essa estrutura é colocar nesse trycatch um finally fechando o scanner e o bufferedWriter.

Valew galera. Obrigado. O que eu não estava conseguindo entender, é que só é gravado no arquivo, quando o comando .close do bufferedwriter é chamado.

Para um teste rápido, coloquei um break dentro do while, então quando eu digito uma palavra ou frase no teclado e aperto o enter, ele captura o que foi digitado, e sai do while. Claro que se eu quisesse fazer várias capturas, seria necessário implementar uma palavra chave, como o Filipi disse, para sair desse while, mas o importante é que eu compreendi que só se grava no arquivo, quando o buffered wirte é fechado.

Obrigado a todos.