2013-11-09 51 views
1

如何在文本文件中追加現有行?如果要編輯的行位於文件的中間怎麼辦?根據以下代碼,請提供建議。如何在文本文件中追加現有行

必須通過&去嘗試了以下內容:

我的代碼:

filePath = new File("").getAbsolutePath(); 
    BufferedReader reader = new BufferedReader(new FileReader(filePath + "/src/DBTextFiles/Customer.txt")); 
    try 
    {       
     String line = null;   
     while ((line = reader.readLine()) != null) 
     { 
      if (!(line.startsWith("*"))) 
      { 
       //System.out.println(line); 

       //check if target customer exists, via 2 fields - customer name, contact number 
       if ((line.equals(customername)) && (reader.readLine().equals(String.valueOf(customermobilenumber)))) 
       { 
        System.out.println ("\nWelcome (Existing User) " + line + "!"); 

        //w target customer, alter total number of bookings @ 5th line of 'Customer.txt', by reading lines sequentially 
        reader.readLine(); 
        reader.readLine(); 
        int total_no_of_bookings = Integer.valueOf(reader.readLine()); 

        System.out.println (total_no_of_bookings); 
        reader.close(); 
        valid = true; 


        //append total number of bookings (5th line) of target customer @ 'Customer.txt' 
        try { 
         BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath + "/src/DBTextFiles/Customer.txt"))); 
         writer.write(total_no_of_bookings + 1); 
         //writer.write("\n"); 
         writer.close(); 
        } 
        catch (IOException ex) 
        { 
         ex.printStackTrace(); 
        } 
        //finally 
        // { 
         //writer.close(); 
        //} 
       }     
      } 
     }  

回答

1

的reader.readLine()方法遞增每次調用的時間線。我不確定這是否適用於您的程序,但您可能需要將reader.readline()作爲字符串存儲,因此只能調用一次。

要在文本文件的中間追加一行,我相信您將不得不重新編寫文本文件直到您想要追加行的位置,然後繼續編寫文件的其餘部分。這可以通過將整個文件存儲在字符串數組中,然後寫入某個點來實現。寫作

例子:

BufferedWriter writer = new BufferedWriter(new FileWriter(new File(path))); 
writer.write(someStuff); 
writer.write("\n"); 
writer.close(); 
+0

readline()是故意讓我到達所需的路線。至於實現,我該如何重寫文本文件並寫下剩餘的內容?請舉例嗎?或者這適用? - http://www.raghuwansh.com/2013/07/10/write-text-file-in-java/ – user2945412

+0

你可以使用BufferedWriter – grimrader22

+1

檢查我的編輯。這有幫助嗎? – grimrader22

2

爲了能夠追加內容到現有的文件,你需要在附加m中打開它頌。例如使用FileWriter(String fileName, boolean append)並將true作爲第二個參數。

如果行在中間,則需要將整個文件讀入內存,然後在完成所有編輯時將其寫回。

這可能適用於小文件,但如果您的文件太大,那麼我會建議將實際內容和編輯內容寫入臨時文件,完成後刪除舊文件重命名臨時文件爲與舊的名稱相同。

+0

+1「完成後刪除舊的一個重命名臨時文件是與舊的名稱相同的名稱」:) – async

0

AFAIK你不能這樣做。我的意思是,追加一條線是可能的,但不能插入中間。這與java或其他語言無關......文件是一串寫入的字節......如果您在某個任意點插入某些內容,那麼該序列不再有效並需要重新寫入。

所以基本上,你必須創建一個函數來做到這一點讀插片,改寫

1

或許你也應該遵循的答案,您發佈的第二個鏈接的建議。你可以使用random access file來訪問文件的中間部分,但是如果你開始在文件中間的任意位置追加而不記錄開始寫入時的內容,那麼你將覆蓋它的當前內容,如this answer。最好的辦法是,除非有問題的文件難以處理,否則就像其他人以前所建議的那樣,使用現有文件和新數據彙編一個新文件。