我创建了一个名为'test.txt'的文件,然后从用户那里获取输入以将输入写入文件。一切都运行良好。该程序根本不显示任何错误。创建文件并且程序从用户获取输入,但是当我检查文件的内容时,它是空的。谁能弄清楚我的代码有什么问题?代码如下。
package InputOutput;
import java.io.*;
public class CharacterFileReaderAndFileWriter{
private BufferedReader br = null;
private BufferedWriter bw = null;
private PrintWriter pw = new PrintWriter(System.out, true);
public File createFile() throws IOException{
File f = new File("test.txt");
return f;
}
public void writeToFile() throws IOException{
try{
bw = new BufferedWriter(new FileWriter(createFile()));
}
catch(FileNotFoundException ex){
ex.printStackTrace();
}
//take input from the console (user)
br = new BufferedReader(new InputStreamReader(System.in));
String s;
pw.println("Please enter something");
pw.println("To stop the program, enter 'stop'");
do{
s = br.readLine();
if(s.compareTo("stop")==0)
break;
s+= "\r\n";//adding an new line to the string s
bw.write(s);
}
while(s.compareTo("stop")!=0);
br.close();
bw.close();
}
public static void main(String[] args) throws IOException{
CharacterFileReaderAndFileWriter cfr = new CharacterFileReaderAndFileWriter();
cfr.writeToFile();
}
}
答案 0 :(得分:1)
大多数示例程序都显示您必须在.flush()
之前的BufferedWriter
上致电.close()
。这不应该是必需的,.close()
应该自动调用.flush()
,但它不会受到伤害。此外,您应该以相反的顺序调用所有Stream
/ Writer
对象.close()
方法,再次正确编写的类应该在它们包装的所有对象上调用.close()
,但它无论如何都不会伤害它。
其他可能会在以后发现的事情:
if(s.compareTo("stop")==0)
应该是
if ("stop".equalsIgnoreCase(s))
效率更高,消除NullPointerException
上s
的可能性,处理 stop 的任何情况,最重要的是比使用.compareTo()
更惯用的Java
s+= "\r\n";//adding an new line to the string s
bw.write(s);
应该是
bw.write(System.getProperty("line.separator"));
bw.write(s);
s+=
创建需要收集的中间对象和垃圾。硬编码行结尾也很糟糕。
答案 1 :(得分:-2)
您需要关闭输出流。 file.close();