簡體   English   中英

逐行讀取文件,然后修改一行並僅保存該行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM