【发布时间】:2016-01-12 06:37:56
【问题描述】:
假设我有几个对象的值存储在一个文本文件中。一开始,会有一些值具有相同的值,例如,默认情况下所有学生的年龄都是 0。现在,如果我想使用传统的文件处理方法在一个学生的年龄进行编辑,我最终将对所有其他年龄为 0 的学生进行更改,同时将我的数据写入临时文件。因此,我希望如果有更好的方法来使用 java 中的文件处理对文件进行更改。仅举一个手头问题的示例,请考虑以下文本文件
埃兹格
迪克斯特拉
123
72 岁
露丝
迪克斯特拉
12345
29 岁
该行表示年龄和姓名之间的空格。现在,我的任务是构建一个程序,用户可以在其中更改任何细节,例如名字、姓氏、roll_number 或年龄。从上面给出的示例中可以看出,两个人可以共享一些常见的数据。在这种情况下,它是姓氏。但是,卷号 (123,12345) 将始终是唯一的。当您必须更改类似数据时,问题就来了。假设用户想要编辑姓氏。然后我会创建一个临时文件来保存这些数据,然后我会在某些条件下读取这些数据。所以代码可能如下所示:
注意:此数据存储在已知位置"abc.txt"。
BufferedReader br=new BufferedReader(new FileReader("abc.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("Temp.txt"));
String a=br.readLine();
while(a!=null)
{ bw.write(a);
bw.newLine();
a=br.readLine();
}
br.close();
bw.close();
BufferedReader br1=new BufferedReader(new FileReader("Temp.txt"));
BufferedWriter bw1=new BufferedWriter(new FileWriter("temp.txt"));
String b=br1.readLine();
while(b!=null)
{
if(b.equals(requested_surname))
bw1.write(w);//w is the String that holds the altered surname as desired by the User, for the sake of an example say it is Euler
else
bw1.write(b);
bw1.newLine();
b=br1.readLine();
}
bw1.close();
br1.close();
f.delete();
因此,原始文本文件 "abc.txt" 将显示如下内容:-
埃兹格
欧拉
123
72 岁
露丝
欧拉
12345
29 岁
现在这将是一个笨拙的问题,因为我打算只更改 Ruth 的姓氏!我知道这与我最初询问的内容略有不同,但我认为如果我可以针对“Ruth”下方的行,我可以做出所需的更改。
请帮忙...
【问题讨论】:
-
Modifying existing file content in Java 的可能重复项。简单的回答:不,除非编辑将数据附加到文件末尾,或覆盖现有数据。
-
是的,您当然可以就地编辑,但是(如上面@andy-turner 所说)只有在您不更改文件大小的情况下。例如,如果您需要将 0 更改为 15,您可以用“15”覆盖“0”,但不能用“15”覆盖“0”。因此,对于这种编辑,您希望您的字段具有恒定的宽度,而不是可变的宽度。也可以附加到文件中。查看随机访问文件。