【问题标题】:Java: Txt file resets with each execution of the code instead of saving modificationsJava:每次执行代码时都会重置 Txt 文件,而不是保存修改
【发布时间】:2020-07-21 15:33:47
【问题描述】:

我是 Java 新手,我正在尝试使用 txt 文件。以下程序允许用户访问一组活动,每个活动都有自己的 ID,并根据需要进行修改。 (有允许修改文件的附加代码)。然而,虽然在代码的最后成功修改了txt文件,但每次再次执行代码时,txt文件都会重置而不是保留修改。这是为什么? 可以看出,我添加了一个 if 语句来防止这种情况发生。

package Try2;
import java.io.*;
import java.util.Scanner;

public class Activities {
    public static void main(String[] args) throws IOException {
        
        String acFileName = "./Activities.txt";

        File acFile = new File(acFileName);
        
        FileWriter acFw = new FileWriter(acFile);
        
        PrintWriter acPw = new PrintWriter(acFw);
        
        if((!acFile.exists()) || (acFile.length() == 0)) { //Checks if the file is empty/non existent (useful for the first time the code is executed)
            
            acPw.println("1 Sleep");
            acPw.println("2 Exercise");
            acPw.println("3 Socializing");
            acPw.println("4 Studying");
            acPw.println("5 Transportation");
            acPw.close();
        }

【问题讨论】:

  • 更新(仍未解决):尽管这听起来很明显,但我做了一些简单的调试,并且由于某种原因,if 语句在每次执行代码时都会运行。这是为什么?布尔条件是否不准确?我可以用什么来代替它?
  • 这些答案是否能解决您的问题?

标签: java text


【解决方案1】:

当你运行代码时:

FileWriter acFw = new FileWriter(acFile);

文件被截断,任何写入都从文件的开头开始。更改该代码的一种可能方法是:

String acFileName = "./Activities.txt";

File acFile = new File(acFileName);
    
if((!acFile.exists()) || (acFile.length() == 0)) { //Checks if the file is empty/non existent (useful for the first time the code is executed)
    FileWriter acFw = new FileWriter(acFile, true);
   
    PrintWriter acPw = new PrintWriter(acFw);

    acPw.println("1 Sleep");
    acPw.println("2 Exercise");
    acPw.println("3 Socializing");
    acPw.println("4 Studying");
    acPw.println("5 Transportation");
    acPw.close();
}

请注意,我已将 FileWriter 和 PrintWriter 的创建移到 if 代码中。此外,我在 FileWriter 的构造中添加了一个布尔值,设置为true。根据docs

public FileWriter​(File file, boolean append) throws IOException

在给定要写入的文件和一个布尔值(指示是否使用平台的默认字符集)的情况下构造一个 FileWriter。

参数: file - 要写入的文件

append - 如果为真,那么字节将被写入文件的末尾而不是开头

关键是append 参数。这个标志意味着你每次打开文件时都会追加。

【讨论】:

    【解决方案2】:

    您可以简单地为您的FileWriter 提供一个设置为trueappend 标志(见下文)。

    没有该标志,FileWriter 会创建一个新文件。

    你的条件逻辑是多余的,因为检查是由 FileWriter 自己完成的:

    public static void main(String[] args) throws IOException {
    
        String acFileName = "./Activities.txt";
        File acFile = new File(acFileName);
        PrintWriter acPw  = new PrintWriter(new FileWriter(acFile, true));
    
        acPw.println("1 Sleep");
        acPw.println("2 Exercise");
        acPw.println("3 Socializing");
        acPw.println("4 Studying");
        acPw.println("5 Transportation");
        acPw.close();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 2021-07-15
      • 2021-12-06
      • 2015-05-20
      • 2021-02-02
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多