我刚刚开始学习java,我找到了一个关于如何更新文本文件的例子,但我需要一些指导,告诉我如何操作它来更新文本文件中的元素和分隔符。例如,如果我想用新地址编辑我的地址2
登录,姓名,地址,联系
login1,NAME1,地址1,contact1
Login2身份,NAME2,地址2,contact2
File f=new File("appendOldFile.txt");
FileInputStream fs = null;
InputStreamReader in = null;
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
String textinLine;
try {
fs = new FileInputStream(f);
in = new InputStreamReader(fs);
br = new BufferedReader(in);
while(true)
{
textinLine=br.readLine();
if(textinLine==null)
break;
sb.append(textinLine);
}
String textToEdit1 = "abc";
int cnt1 = sb.indexOf(textToEdit1);
sb.replace(cnt1,cnt1+textToEdit1.length(),"New Append text");
String textToEdit2 = "xyz";
int cnt2 = sb.indexOf(textToEdit2);
sb.replace(cnt2,cnt2+textToEdit2.length(),"Second new edit text");
fs.close();
in.close();
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
通常,您不会修改现有的文本文件。你加载它,修改文本,然后重写它。这是因为文本文件没有固定大小的记录(行,等等),因此任何更改通常涉及更改的位置移位后插入/移除的文本量。文件系统通常不支持在文件中间插入/删除。因此,文本文件不会被修改为文件,它们会在更改完成后重写。
在程序中,您有两种基本方法可以解决这个问题。您可以将文本文件加载为一个文本字符串,或者更可能是字符串列表,文本文件中每一行的一个字符串。然后,您可以修改这些字符串,然后将其写回。 这是我建议的第一步:读取文件int ArrayList<String>
中的行,然后操作该列表,然后在要保存更改时将字符串写入文件。
或者,您实际上可以解析文本文件数据,因此您将拥有包含address
,name
等字段的Java对象。然后您将此数据修改为程序中的数据,并且那么你基本上是从这个数据创建一个新文件。
如果文本文件内容与程序中的对象之间有明确的1:1关系,例如每行成为一个对象,所有数据都来自该行,然后在写入时,对象的所有数据都写为单个然后,这被称为“序列化”:将对象转换为一个字节块(不一定是人类可读的文本,但可以是),适合保存到文件或通过网络连接进行传输。但是,在这种情况下,您可能会忘记“序列化”,因为它是一个相当高级的概念,并在您学习了更多Java之后再回过头来。
答案 1 :(得分:0)
首先,您必须使用迭代浏览文件,并找到所需的登录名作为更改相应地址的密钥,为此我只给您提示使用谷歌或进一步搜索自己以便顶部最好的结果。 进一步的帮助回复...
File f=new File("C:/Users/Junaid Hassan/Contacts",FINAL1);
FileReader fr=new FileReader(f);
BufferedReader br=new BufferedReader(fr);
String key;
while((key=br.readLine())!=null) //then you have to split the strings
String SPLIT[]=NAME.split(",");
String Login=SPLIT[0];
String Name=SPLIT[1];
String Address=SPLIT[2];
String Contact=SPLIT[3];
//then put a check that if your login will match a key
if(Login.equals(key)){
//here do what you want change the address
}
}