使用java编辑或修改现有文件

时间:2017-02-09 11:31:46

标签: java file

我正在尝试修改现有的下面的文件。

User navigates to Facebook 
Given I am on Facebook login page 

Scenario: enter username as "TOM" 
And I enter password as "JERRY" 


Feature: annotation  
Background: 
User navigates to Facebook 
Given I am on Facebook login page 

But Relogin option should be available

我尝试使用以下代码并清除文件内容!

public void addTags(File file) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        String line;
        BufferedWriter bw = null;
        FileWriter fw = null;
        int count = 0;
        while ((line = bufferedReader.readLine()) != null) {               
            fw = new FileWriter(file);

            fw.write(line);
            fw.write("\n");
            fw.close();
        }       
        bufferedReader.close();
    }

请纠正我..我的代码有什么问题。

2 个答案:

答案 0 :(得分:3)

在编写文件之前,您必须先阅读该文件。

因此,首先逐行将文件读入ArrayList。

使用Files.readAllLines(yourPath)可以轻松实现。

之后,只需迭代列表并按原样写入文件即可。别忘了关闭BufferedWriter

我建议在try-block中初始化它:

尝试(BufferedWriter bw = new BufferedWriter(new FileWriter(yourFile))){     //写你的文件 }

这样你就不必处理作家的结束了。

就像那样:

private static void readWrite(Path filePath) throws IOException {
    List<String> allLines = Files.readAllLines(filePath);
    int count = 0;
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath.toFile()))) {
      for (String line : allLines) {
        if (line.trim().contains("Scenario")) {
          count++;
          bw.write("@tag" + count);
          bw.write("\n");
        }
        bw.write(line);
      }
    }
  }

答案 1 :(得分:1)

你的问题出在这行代码中

fw = new FileWriter(file);

首先,你在while循环中初始化fw。每次循环执行时都会重新初始化。 其次,您无法读取和写入同一文件。您必须创建新文件,从旧文件复制,插入新数据,复制休息等。如果您希望新文件表现为已编辑的旧文件,则必须删除旧文件并重命名新文件。 你的bw也没有初始化;

固定代码应如下所示:

public void addTags(File file) throws IOException {
    File tmp = new File(temp.txt);
    BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
    BufferedWriter bw = new BufferedWriter(new FileWriter(tmp));
    String line;
    int count = 0;
    while ((line = bufferedReader.readLine()) != null) {           
        if (line.trim().contains("Scenario")) {
            count++;
            bw.write("@tag" + count);
            bw.write("\n");
        }
        fw.writeLine(line);
    }
    fw.close();
    bufferedReader.close();
    String newName = file.getName();
    Files.delete(file);
    tmp.renameTo(newName);
}