2017-02-09 81 views
1

正试图修改现有的以下文件。使用java编辑或修改现有文件

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(); 
    } 

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

+0

你在哪里初始化的BufferedWriter? – Christian

+0

[将字符串附加到基于特定字符串位置的文件]可能的重复(http://stackoverflow.com/questions/42129708/append-strings-to-a-file-based-on-a-particular-string-职位) – AxelH

+0

我没有看到与你在5小时前提出的其他问题的区别。 – AxelH

回答

3

你不得不读入文件之前,你可以写。

因此,首先逐行读取文件到ArrayList中。

有一个简单的方法使用Files.readAllLines(yourPath)

之后,只需迭代列表并将其写入文件即可。只要不要忘记关闭BufferedWriter

我建议将其初始化try块内:

试试(但是BufferedWriter体重=新的BufferedWriter(新的FileWriter(yourFile))){// 写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

你的问题是在这行代码

fw = new FileWriter(file); 

首先,你在while循环初始化FW。每次执行循环时都会重新初始化。其次,你不能读写同一个文件。您必须创建新文件,从旧文件复制,插入新数据,复制休息等等。如果您希望新文件的行为与编辑后的旧文件相同,则必须删除旧文件并重新命名新文件。 另外你的体重没有初始化;

固定码应该是这样的:

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); 
}