我正在尝试编写一个用于从控制台获取输入的代码。输入文本将保存在特定文件中。我的代码完美地获得了控制台输入&也创建一个文件,但控制台输入不保存到文件。
这是我的代码:
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")));
}
}
任何人都有任何想法解决这个问题?请帮忙.. 谢谢高级。!!
答案 0 :(得分:3)
你需要在写完后关闭或冲洗作家;
尝试:
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会自动刷新它。
答案 1 :(得分: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
答案 2 :(得分:0)
看起来你没有冲洗你的BufferedWriter,这可能是一个问题。
你也永远不会关闭BufferedWriter,这也有帮助,因为BufferedWriter在关闭过程中会自行刷新。
答案 3 :(得分:0)
BufferedWriter
将输出缓冲在字符缓冲区中,而不是立即将字符发送到基础Writer
(在这种情况下为FileWriter
)。这是一种很好的做法,因为它减少了可能代价高昂的写入次数。当缓冲区已满或者显式调用flush()
时,字符将被发送到基础Writer。
其次应始终关闭Writer
,以便可以再次释放所有已使用的资源。 close()
操作将在关闭之前自动清除缓冲区中剩余的所有字符。 (请注意,对于不缓冲flush()
方法的编写器通常不执行任何操作)
这基本上是你的代码出错:因为你没有刷新或关闭BufferedWriter
,并且可能写的文件少于缓冲区大小,你的输出只是保留在缓冲区中。 / p>
您的代码中似乎有些其他问题(不会立即导致您报告的问题)
FileWriter
。通常,您只使用循环前声明的一个FileWriter
。由于您在覆盖模式下创建了Writer
,因此每个String
都会覆盖之前的内容。FileNotFoundException
时会抛出FileWriter
。