2017-02-09 54 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); 
}