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

时间:2013-12-13 09:36:55

标签: java file-io

我有一个如下所示的文件,整数和一个我不想改变的标题。

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

        }

我可能会得到一个巨大的文件,所以我不想将整个内容读入内存然后保存。

有没有办法将我刚刚修改过的行保存回文件中的正确位置?某种寻求排队。

1 个答案:

答案 0 :(得分:1)

您可以使用Java中的Random Access File功能来执行此类操作。但复杂的是你可能会改变事物的长度。如果-3变为5,那么位数会改变,如果123变为50,则位数也会改变。

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

如果不是,你也可以创建一个新文件,从一个文件输入到另一个文件,因为任何其他方法都会涉及到一个混乱的噩梦。

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

您可以随时删除原件并在处理完成后重命名新原件,但保留原件通常更安全。