Java 逐行读取文件,然后修改一行并仅保存该行

Java 逐行读取文件,然后修改一行并仅保存该行,java,file-io,Java,File Io,我有一个像下面这样的文件,ints和一个我不想更改的头文件 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.read

我有一个像下面这样的文件,ints和一个我不想更改的头文件

    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?
            }

        }
buffer=newbufferedreader(newfilereader(fileName));
字符串headerOfFile=buffer.readLine();
而((line=buffer.readLine())!=null)
{
String[]list=line.split(cvs);
for(int i=0;i50)
t=50;
列表[i]=t+“”;
//修改后,如何仅将此行保存回文件?
}
}
我可能会得到一个很大的文件,所以我不想把整个内容读入内存然后保存

有没有办法将我刚刚修改的行保存回文件中的正确位置?某种形式的寻线。

您可以使用Java中的功能来完成这类工作。但复杂的是,你可能会改变事物的长度。如果-3变为5,则位数改变;如果123变为50,则位数也改变

如果您可以在不更改数字计数(即05050)的情况下使其正常工作,那么您只需扫描文件,并在找到字符时修改它们

如果没有,您也可以创建一个新文件,在处理过程中从一个文件流到另一个文件流,因为任何其他方法都会涉及到混乱的噩梦

只需将InputStream指向输入文件,将OutputStream指向新的输出文件,然后扫描输入(可能一次扫描一行),将值(根据需要修改)输出到输出。内存使用量很小,性能与文件大小成线性关系


处理完成后,您始终可以删除原始文件并重命名新文件,尽管保留原始文件通常更安全。

Define Hugh?最简单的方法是在阅读时一行一行地写。更改文件中的内容有点棘手。我正在使用2MB进行测试,但我希望它能够扩展。我同意,诀窍是把它存回我刚读到的那一行。我想你已经说服了我,我不想做这件事的噩梦。所以只需附加到一个新文件,对吗?