我正在How to append text to an existing file in Java阅读与我相似的话题并在那里尝试过解决方案,不幸的是,他们没有回答我的具体案例。
我将对文件进行大量更改,因此我认为我将创建一个方法,该方法将返回PrintWriter
对象,我可以通过执行writer.prinln("text");
来执行更改
private static PrintWriter WriteToFile() {
PrintWriter out = null;
BufferedWriter bw = null;
FileWriter fw = null;
try{
fw = new FileWriter("smrud.txt", true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
// out.println("the text");
return out;
}
catch( IOException e ){
return null;
}
finally{
try{
if( out != null ){
out.close(); // Will close bw and fw too
}
else if( bw != null ){
bw.close(); // Will close fw too
}
else if( fw != null ){
fw.close();
}
else{
// Oh boy did it fail hard! :3
}
}
catch( IOException e ){
// Closing the file writers failed for some obscure reason
}
}
}
所以在我的主要方法中,我正在调用这个方法
PrintWriter writer = WriteToFile();
然后我正在进行更改
writer.println("the text2");
我正在关闭编写器以保存对磁盘的更改:
writer.close();
不幸的是,我没有看到任何变化。当我在WriteToFile()
方法中添加更改时,我会看到更改:
private static void WriteToFile() {
PrintWriter out = null;
BufferedWriter bw = null;
FileWriter fw = null;
try{
fw = new FileWriter("smrud.txt", true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
out.println("the text");
}
catch( IOException e ){
// File writing/opening failed at some stage.
}
finally{
try{
if( out != null ){
out.close(); // Will close bw and fw too
}
else if( bw != null ){
bw.close(); // Will close fw too
}
else if( fw != null ){
fw.close();
}
else{
// Oh boy did it fail hard! :3
}
}
catch( IOException e ){
// Closing the file writers failed for some obscure reason
}
}
}
但是这个方法每次执行都会打开FileWriter
,BufferedWriter
和PrintWriter
,我想通过将PrintWriter
返回到main方法然后执行{来避免这种情况{1}}并在一段时间后将其关闭writer.println("text");
,但这不起作用。
任何建议都将受到赞赏。
答案 0 :(得分:0)
所有作者都在WriteToFile
关闭,所以当PrintWriter
对象返回时,它不会写任何内容。
您必须增加PrintWriter
的范围,并在WriteToFile
方法之外进行管理。
喜欢:
public static void main(String[] args) {
try (PrintWriter printWriter = createWriter()) {
printWriter.println("Line 1");
printWriter.println("Line 2");
} catch (IOException e) {
e.printStackTrace();
}
}
private static PrintWriter createWriter() throws IOException {
return new PrintWriter(new FileWriter("smrud.txt", true));
}
答案 1 :(得分:0)
不确定我明白你的观点。
无论如何,为什么不创建专门的“作家”对象?在它的构造函数中,你将打开{File;缓冲的;打印} Writer,那么你的对象将需要一个println(String text)
,它将字符串参数转发给适当的编写器。好的,你需要一个close()
方法来调用你所有的作家对象。
您还可以扩展此功能,使您的对象成为单例并同步打印方法,允许您的软件在不同类的同一文件上打印。