Java写入文件 - 使用类

时间:2018-05-17 13:45:15

标签: java

我正在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
         }
      }




}

但是这个方法每次执行都会打开FileWriterBufferedWriterPrintWriter,我想通过将PrintWriter返回到main方法然后执行{来避免这种情况{1}}并在一段时间后将其关闭writer.println("text");,但这不起作用。

任何建议都将受到赞赏。

2 个答案:

答案 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()方法来调用你所有的作家对象。

您还可以扩展此功能,使您的对象成为单例并同步打印方法,允许您的软件在不同类的同一文件上打印。