[英]Reading a file line by line then modifying a line and saving only that line
我下面有一個像這樣的文件,整數和不想更改的標頭。
a,b,c,d,e
1,2,3,4,5
44,2,20,5,4
55,2,20,3,10
....
我想搜索文件中的數字。 如果數字小於5,我想將數字5。如果數字大於50,我將數字50。
buffer = new BufferedReader(new FileReader(fileName));
String headerOfFile = buffer.readLine();
while((line = buffer.readLine()) != null)
{
String[] list = line.split(cvs);
for(int i = 0; i < list.length; i++)
{
int t = Integer.parseInt(list[i]);
if(t < 5)
t = 5;
else if(t > 50)
t = 50;
list[i] = t + "";
// How do I save back into the file only this line after modifying it?
}
}
我可能會得到一個很大的文件,所以我不想將整個內容讀到內存中然后保存。
有沒有辦法將剛修改的行保存到文件中的正確位置? 尋求排隊的某種方式。
您可以使用Java中的隨機訪問文件功能來執行此類操作。 但是,復雜之處在於您可能在改變事物的長度。 如果-3更改為5,則位數更改;如果123更改為50,則位數更改。
如果您可以在不更改位數的情況下使它正常工作(例如05、050),則只需在文件中掃描修改的字符即可。
如果不是這樣,那么您最好還是創建一個新文件,在進行過程中從一個處理流向另一個處理流,因為其他任何方法都將帶來惡夢般的混亂。
只需將InputStream指向輸入文件,將OutputStream指向新的輸出文件,然后掃描Input(可能一次一行),然后將值(按要求修改)輸出到輸出即可。 內存使用量很小,並且性能與文件大小成線性關系
您總是可以刪除原始文件,並在處理完成后重命名新文件,盡管保留原始文件通常比較安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.