2012-08-08 101 views
1

我有一個文本文件。我想修改該文件中的某一行。我不想重寫文件的其他行(這對大文件來說非常慢)。是否有可能在Java中修改某些文本文件的行,而不覆蓋所有內容

我不是指附加模式我可以在最後「添加」行;而是「編輯」。

+3

這不是一個真正的Java問題,而更像是文件在計算機上作爲連續數據位存儲的物理問題。 – 2012-08-08 14:38:22

回答

3

你可以用RandomAccessFile來做到這一點。你改變改變第一行的內容。

你不能做的是插入或刪除任何字節,因爲這需要你從所做的這一點轉移所有數據。 (如果這是接近文件的末尾它可以比快得多重寫一切)

而且RandomAccessFile的是困難的,因爲它設計用於byte小號

2

你的標題國char使用「某一行「 - 你的問題主體陳述」第一行「。修改第一行更簡單,因爲你不需要找到行的起始字節。您可以使用RandomAccessFile覆蓋該文件的相關塊。

但是,新行必須與舊行大小相同(以字節爲單位)。如果新行中的有​​用數據比舊行中的有用數據短,則需要弄清楚如何填充它。如果新行需要比舊行更長,則必須改爲創建新文件,並適當複製數據。

通常,文件系統不支持在現有文件中插入或刪除。

1

你可以這樣做(這絕不是最佳代碼)。

import java.io.*; 

public class Test { 
    // provide the file name via the command line 
    public static void main(String []args) throws Exception { 
     BufferedReader br = new BufferedReader(new FileReader("your_file_name_here")); // used for reading the file 
     BufferedWriter bw = new BufferedWriter(new FileWriter("new_file_name_here.txt")); 
     String str = br.readLine(); 
     while (str != null) { 
      // modify the line here if you want, otherwise it will written as is. 
      // then write it using the BufferedWriter 
      bw.write(str, 0, str.length()); 
      bw.newLine(); 
      // read the next line 
      str = br.readLine(); 
     } 
     br.close(); 
     bw.close(); 
    } 
} 
+0

所以它像從一個文件複製內容到另一個 – Gadoya 2012-08-08 16:45:00

+0

你可以把這樣的,或者如果你想你可以使用RandomAccessFile類來訪問某些字節並將它們轉換爲字符串,修改字符串,將其轉換回字節,然後寫入它到舊文件。但是這需要一些工作。正如我所說的上面的代碼絕不是最優的代碼。 – 2012-08-08 22:20:50

相關問題