Java 逐行读取文件,然后修改一行并仅保存该行
我有一个像下面这样的文件,ints和一个我不想更改的头文件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
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进行测试,但我希望它能够扩展。我同意,诀窍是把它存回我刚读到的那一行。我想你已经说服了我,我不想做这件事的噩梦。所以只需附加到一个新文件,对吗?