Как написать входной текст в файл с помощью Java

1

Я пытаюсь написать код для ввода ввода из консоли, и текст ввода будет сохранен в определенном файле. Мой код отлично вставляет консоль и создает файл, но вход в консоль не сохраняется в файле.

Вот мой код:

package com.mahbub.file_object;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Scanner;

public class ConsoleInput {

    public static void main (String [] args) throws IOException{
        BufferedReader br=null;
        BufferedWriter bw=null;

        File file=new File("D:/test1.txt");



        Reader reader=new InputStreamReader(System.in);
        br =new BufferedReader(reader);
        String str=null;

        do{
            System.out.println("Enter 'q' for quit!!");
            str=br.readLine();
            FileWriter fw=new FileWriter(file,true);
            bw=new BufferedWriter(fw);
            bw.write(str);
            System.out.println(str);
        }while(!(str.equalsIgnoreCase("q")));

    }
}

У кого-нибудь есть идея решить эту проблему? Помощь Pls. Спасибо в продвинутом. !!

Теги:
file

4 ответа

1
Лучший ответ

Вам нужно flush() и close() FileWriter (его закрытие также будет скрыто).

Попробуй это:

do {
    System.out.println("Enter 'q' for quit!!");
    str=br.readLine();
    FileWriter fw=new FileWriter(file,true);
    bw=new BufferedWriter(fw);
    bw.write(str);
    bw.flush();    //do this , you missed it
    System.out.println(str);
}
while(!(str.equalsIgnoreCase("q")));

bw.close();     //do this , you missed it
3

После написания вам нужно закрыть или смыть Writer;

пытаться:

System.out.println("Enter 'q' for quit!!");
        str=br.readLine();
        FileWriter fw=new FileWriter(file,true);
        bw=new BufferedWriter(fw);
        bw.write(str);
        bw.flush();//You are Missing this
        System.out.println(str);

Редактировать: Хорошо, я сделал флеш в соответствии с предложением.

Но вам все равно нужно вызвать bw.close(); после того, как вы закончите с писателем. Закрытие Writer автоматически очистит его.

  • 0
    Вы также должны создать и открыть свой файлописатель до начала цикла, а затем закрыть его после завершения цикла
  • 0
    Закрытие должно быть в блоке finally, или вы должны использовать структуру try-with-resources
0

BufferedWriter буферизует вывод в символьном буфере вместо немедленной отправки символов в базовый Writer (в этом случае FileWriter). Это хорошая практика, поскольку она уменьшает количество возможных затрат. Символы отправляются в базовый Writer, когда буфер заполнен, или когда делается явный вызов flush().

Во-вторых, Writer всегда должен быть закрыт, чтобы все использованные ресурсы могли быть снова освобождены. Операция close() автоматически закрывает любые символы, оставшиеся в буфере перед закрытием. (обратите внимание, что для писателей, которые не поддерживают метод flush() обычно ничего не делает)

Это в основном то, что не так в вашем коде: поскольку вы не закрываете или закрываете BufferedWriter и, скорее всего, записываете меньше символов в файл, чем размер буфера, ваш результат просто остается в буфере.

Некоторые другие вещи кажутся неправильными в вашем коде (что не сразу вызывает проблему, о которой вы сообщаете)

  • вы создаете новый FileWriter для каждой строки для записи. Обычно вы должны использовать только один FileWriter объявленный перед циклом. Поскольку вы создаете Writer в режиме перезаписи, каждая String просто перезаписывает предыдущую.
  • если файл test1.txt не существует, этот код будет бросать FileNotFoundException при попытке создать FileWriter.
  • Вы используете строку "q" в качестве маркера, чтобы прекратить добавлять к файлу, но вы пишете "q" в файл до проверки условия завершения. Наверное, это не намерение.
0

Не похоже, что вы очищаете BufferedWriter, что может быть проблемой.

Вы также никогда не закрываете BufferedWriter, что также помогает, поскольку BufferedWriter сбрасывает себя во время процесса закрытия.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню