写入文本文件而不用Java覆盖

rmp*_*150 18 java

我正在尝试编写一个方法,如果一个文件尚未存在,则生成"log.txt文件"然后写入该文件.我遇到的问题是每次调用该方法时,它都会覆盖现有的日志.如何更改方法以便不是覆盖数据而是更新文件?

我的写文件方法:

    File log = new File("log.txt")
    try{
    if(log.exists()==false){
            System.out.println("We had to make a new file.");
            log.createNewFile();
    }
    PrintWriter out = new PrintWriter(log);
    out.append("******* " + timeStamp.toString() +"******* " + "\n");
    out.close();
    }catch(IOException e){
        System.out.println("COULD NOT LOG!!");
    }
Run Code Online (Sandbox Code Playgroud)

Qia*_*Jin 37

只需PrintWriter out = new PrintWriter(log);改为

PrintWriter out = new PrintWriter(new FileWriter(log, true));
Run Code Online (Sandbox Code Playgroud)

  • 从 javadoc FileWriter(File file, boolean append)。第二个参数指示文件是否以追加模式打开。 (2认同)

thr*_*rau 10

请改用FileWriter.

FileWriter(File file, boolean append)
Run Code Online (Sandbox Code Playgroud)

构造函数中的第二个参数告诉FileWriter将任何给定的输入附加到文件而不是覆盖它.

这是您的示例的一些代码:

File log = new File("log.txt")

try{
    if(!log.exists()){
        System.out.println("We had to make a new file.");
        log.createNewFile();
    }

    FileWriter fileWriter = new FileWriter(log, true);

    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
    bufferedWriter.write("******* " + timeStamp.toString() +"******* " + "\n");
    bufferedWriter.close();

    System.out.println("Done");
} catch(IOException e) {
    System.out.println("COULD NOT LOG!!");
}
Run Code Online (Sandbox Code Playgroud)

  • 没有必要,因为如果文件不存在,FileWriter会尝试创建该文件.如果无法创建文件,则抛出IOException.但是,添加额外的检查有助于理解,并在代码中创建防御点以扩展错误处理. (2认同)