我知道以前的问题就像这个问题一样,但是这个问题与我编写的代码的细节有关。我正在尝试更新文件上的单行代码,即使程序终止也会永久更新,以便可以再次启动数据。我正在编写的方法看起来像这样(没有在eclipse中找到编译错误)
public static void editLine(String fileName, String name, int element,
String content) throws IOException {
try {
// Open the file specified in the fileName parameter.
FileInputStream fStream = new FileInputStream(fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(
fStream));
String strLine;
StringBuilder fileContent = new StringBuilder();
// Read line by line.
while ((strLine = br.readLine()) != null) {
String tokens[] = strLine.split(" ");
if (tokens.length > 0) {
if (tokens[0].equals(name)) {
tokens[element] = content;
String newLine = tokens[0] + " " + tokens[1] + " "
+ tokens[2];
fileContent.append(newLine);
fileContent.append("\n");
} else {
fileContent.append(strLine);
fileContent.append("\n");
}
}
/*
* File Content now has updated content to be used to override
* content of the text file
*/
FileWriter fStreamWrite = new FileWriter(fileName);
BufferedWriter out = new BufferedWriter(fStreamWrite);
out.write(fileContent.toString());
out.close();
// Close InputStream.
br.close();
}
} catch (IOException e) {
System.out.println("COULD NOT UPDATE FILE!");
System.exit(0);
}
}
如果你能查看代码并让我知道你会建议什么,这将是非常好的,因为目前我只收到我的捕获信息。
答案 0 :(得分:1)
好。首先,StringBuilder fileContent = new StringBuilder();
是不好的做法,因为这个文件可能比用户的可用内存大。您根本不应该将大部分文件保留在内存中。通过读入缓冲区,处理缓冲区(必要时调整缓冲区)以及将缓冲区写入新文件来完成此操作。完成后,删除旧文件并将辅助文件重命名为旧文件名。希望这会有所帮助。