2014-10-22 61 views
1

我遇到了一些试图追加到现有文本文件的问题。关闭后,Java PrintWriter不会追加到现有的.txt文件

它似乎没有附加行文本。到目前为止,我已经得到了这个方法:

public static void addLine(File f, String line) { 
    try { 
     FileWriter fw = new FileWriter(f.getName(), true); 
     BufferedWriter buffer = new BufferedWriter(fw); 
     PrintWriter pw = new PrintWriter(buffer); 
     pw.println(line); 
     pw.close(); 

    } catch (IOException e) { 
     System.err.println("IOException: " + e.getMessage()); 

    } 
} 

,在我主我有以下几点:

public static void main(String[] args) { 
    File f = new File("adresOfFile"); 
    if (f.exists() && !f.isDirectory()) { 
     System.out.println("File " + f.getName() + " exists!"); 
     System.out.println("\n" + "Path: " + f.getAbsolutePath()); 
     System.out.println("\n" + "Parent: " + f.getParent()); 
     System.out.println("\n" + "--------------CONTENT OF FILE-------------"); 
     addLine(f, ""); 
     addLine(f, "The line to append"); 
     try { 
      displayContent(f); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } else { 
     System.out.println("File not found"); 
    } 
} 

当我运行它,它似乎并没有给予任何错误。运行程序应该打印出现有的文本(displayContent),这是在追加(addLine)之后完成的。但是当我运行它时,它只显示现有的文本,没有附加的行。

它也没有出现在文本文件中。我试图把一个System.out.println();在方法中,它会打印,所以我知道它正确运行该方法,而不是追加。

编辑AWNSER:更换f.getName()与f和pw.close前加入pw.flush()

回答

0

我认为你displayContent(文件)函数有错误。

上面的代码附加到文件。 查看文件以查看是否添加了任何内容。

您是否还需要在每次追加一行时创建PrintWriter对象? 如果要追加许多连续行,请尝试通过创建静态/最终对象来使用单个PrintWriter/BufferedWriter对象。

+0

当我看文件没有改变时,没有添加行。有没有连续的线,我只需要添加一个空行和一个测试线。 – asdfgh 2014-10-22 10:11:16

+0

你会得到什么输出? 你确定你正在写文件的名称/路径吗? 该代码适用于我。这里是[链接](https://gist.github.com/vedharish/abefb0705e91e4ac28ac) 此代码附加到与moja.java文件相同位置的文件'a'。 – 2014-10-22 10:26:34

+0

并使用[FileWriter(File file,boolean append)](http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html)构造函数代替FileWriter(String,boolean) 在pw.close()之前做pw.flush() – 2014-10-22 10:36:51