首页 > 解决方案 > 第一次运行后没有向 EOF 添加“东西”......怎么会?

问题描述

第二次应该将“某物”一词添加到文件中并打印“atext has been added”,但它会将其视为一个空文件......

任何事物..

public class ReadFile {
    public ReadFile() {
    }

    public boolean readFile() {
        boolean success = false;
        String file_name = "source/text.txt";

        try {
            FileReader file = new FileReader(file_name);

            BufferedReader read = new BufferedReader(file); 
            BufferedWriter bf = new BufferedWriter(new FileWriter (file_name));

            if (read.readLine() != null) {
                bf.append("something");
                System.out.println("a text has been added!!");
            } else {
                bf.append(file_name);
                System.out.println("File updated");
            }

            read.close();
            bf.close();
            success = true;
        } catch(IOException e) {
            e.getMessage();
        }

        return success;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ReadFile rf = new ReadFile();
        rf.readFile();
    }
}

当文件不为空时,应将“某物”添加到 EOF

标签: java

解决方案


这里需要做一些改变

  • 您需要以附加模式打开文件进行写入
  • 您需要在将数据附加到文件后调用 flush() 才能读取它
  • 您需要一个循环,至少如果您希望所有事情都在同一次运行中发生

请注意,我在这里使用了无限循环,这很危险,因此还有改进的余地。捕获异常时我还添加了一个 println


try {
    FileReader file = new FileReader(file_name);
    BufferedReader read = new BufferedReader(file); 
    BufferedWriter bf = new BufferedWriter(new FileWriter (file_name, true));

    while(true) {
        if(read.readLine() != null) {
            bf.append("something");
            System.out.println("a text has been added!!");
            break;
        } else {
            bf.append(file_name);
            bf.flush();            
            System.out.println("File updated");
        }
     }
     read.close();
     bf.close();
     success = true;

} catch(IOException e) {
    System.out.println(e.getMessage());
}

推荐阅读