Я пытаюсь написать код для ввода ввода из консоли, и текст ввода будет сохранен в определенном файле. Мой код отлично вставляет консоль и создает файл, но вход в консоль не сохраняется в файле.
Вот мой код:
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. Спасибо в продвинутом. !!
Вам нужно 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
После написания вам нужно закрыть или смыть 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 автоматически очистит его.
BufferedWriter
буферизует вывод в символьном буфере вместо немедленной отправки символов в базовый Writer
(в этом случае FileWriter
). Это хорошая практика, поскольку она уменьшает количество возможных затрат. Символы отправляются в базовый Writer, когда буфер заполнен, или когда делается явный вызов flush()
.
Во-вторых, Writer
всегда должен быть закрыт, чтобы все использованные ресурсы могли быть снова освобождены. Операция close()
автоматически закрывает любые символы, оставшиеся в буфере перед закрытием. (обратите внимание, что для писателей, которые не поддерживают метод flush()
обычно ничего не делает)
Это в основном то, что не так в вашем коде: поскольку вы не закрываете или закрываете BufferedWriter
и, скорее всего, записываете меньше символов в файл, чем размер буфера, ваш результат просто остается в буфере.
Некоторые другие вещи кажутся неправильными в вашем коде (что не сразу вызывает проблему, о которой вы сообщаете)
FileWriter
для каждой строки для записи. Обычно вы должны использовать только один FileWriter
объявленный перед циклом. Поскольку вы создаете Writer
в режиме перезаписи, каждая String
просто перезаписывает предыдущую.FileNotFoundException
при попытке создать FileWriter
.Не похоже, что вы очищаете BufferedWriter, что может быть проблемой.
Вы также никогда не закрываете BufferedWriter, что также помогает, поскольку BufferedWriter сбрасывает себя во время процесса закрытия.