我有一個文本文件。我想修改該文件中的某一行。我不想重寫文件的其他行(這對大文件來說非常慢)。是否有可能在Java中修改某些文本文件的行,而不覆蓋所有內容
我不是指附加模式我可以在最後「添加」行;而是「編輯」。
我有一個文本文件。我想修改該文件中的某一行。我不想重寫文件的其他行(這對大文件來說非常慢)。是否有可能在Java中修改某些文本文件的行,而不覆蓋所有內容
我不是指附加模式我可以在最後「添加」行;而是「編輯」。
你可以用RandomAccessFile來做到這一點。你改變改變第一行的內容。
你不能做的是插入或刪除任何字節,因爲這需要你從所做的這一點轉移所有數據。 (如果這是接近文件的末尾它可以比快得多重寫一切)
而且RandomAccessFile的是困難的,因爲它設計用於byte
小號
你的標題國char
使用「某一行「 - 你的問題主體陳述」第一行「。修改第一行多更簡單,因爲你不需要找到行的起始字節。您可以使用RandomAccessFile
覆蓋該文件的相關塊。
但是,新行必須與舊行大小相同(以字節爲單位)。如果新行中的有用數據比舊行中的有用數據短,則需要弄清楚如何填充它。如果新行需要比舊行更長,則必須改爲創建新文件,並適當複製數據。
通常,文件系統不支持在現有文件中插入或刪除。
你可以這樣做(這絕不是最佳代碼)。
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();
}
}
所以它像從一個文件複製內容到另一個 – Gadoya 2012-08-08 16:45:00
你可以把這樣的,或者如果你想你可以使用RandomAccessFile類來訪問某些字節並將它們轉換爲字符串,修改字符串,將其轉換回字節,然後寫入它到舊文件。但是這需要一些工作。正如我所說的上面的代碼絕不是最優的代碼。 – 2012-08-08 22:20:50
這不是一個真正的Java問題,而更像是文件在計算機上作爲連續數據位存儲的物理問題。 – 2012-08-08 14:38:22