我有一个如下所示的文件,整数和一个我不想改变的标题。
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?
}
}
我可能会得到一个巨大的文件,所以我不想将整个内容读入内存然后保存。
有没有办法将我刚刚修改过的行保存回文件中的正确位置?某种寻求排队。
答案 0 :(得分:1)
您可以使用Java中的Random Access File功能来执行此类操作。但复杂的是你可能会改变事物的长度。如果-3变为5,那么位数会改变,如果123变为50,则位数也会改变。
如果您可以在不更改数字计数(即05,050)的情况下使其工作,那么您可以在找到它们时扫描修改字符的文件。
如果不是,你也可以创建一个新文件,从一个文件输入到另一个文件,因为任何其他方法都会涉及到一个混乱的噩梦。
只需将InputStream指向输入文件,将OutputStream指向新的输出文件,然后扫描输入(可能一次一行),将值(根据需要修改)输出到输出。内存使用量很小,性能与文件大小呈线性关系
您可以随时删除原件并在处理完成后重命名新原件,但保留原件通常更安全。