gpt4 book ai didi

java - 从文件中删除某些数据

转载 作者:行者123 更新时间:2023-11-29 05:43:50 25 4
gpt4 key购买 nike

我的系统中存储了一个文件,我想从中删除某些数据。

我通过创建一个临时文件来完成此操作,然后将所有原始文件数据写入其中,但不包含我不需要的数据。然后,我将该临时文件重命名为与原始文件同名以替换它。

一切顺利,除了删除原始文件和重命名临时文件时出现问题。

起初,我有带有数据的原始文件,然后在运行应用程序后,我有没有任何删除的带有相同数据的原始文件,以及名为 (file) 的临时文件,带有删除后的数据。

这是我正在使用的方法:

public void remove(String path, String link, String ext) throws IOException {

File file = new File(path);
File temp = File.createTempFile("file", ext, file.getParentFile());
String charset = "UTF-8";
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(temp), charset));

for (String line; (line = reader.readLine()) != null; ) {
line = line.replace(link, "");
writer.println(line);
}

reader.close();
writer.close();
file.delete();
temp.renameTo(file);
}

最佳答案

您可能想检查 delete() 的返回值。如果旧文件没有被删除,那将阻止重命名新文件。如果旧文件可能仍被其他服务打开或您没有正确的权限,您可以尝试将其重命名为 path + ".old" ,然后再删除它。即使无法删除,这也可能会将其移开。您也可以尝试 file.setWriteable(true)。这实际上取决于无法删除文件的原因。

此外,根据您的系统设置,临时文件可能会创建在需要移动而不是重命名的位置(即它不在同一文件系统上),因此 renameTo() 不起作用。

要解决这个问题,请不要创建临时文件。这实际上不是一个临时文件——它在重命名后是永久的。相反,在与原始文件相同的目录中创建一个常规文件,即

File temp = new File(path + ".tmp");

这将确保两个文件都在同一个文件系统上,并且可以重命名。

关于java - 从文件中删除某些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16512867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com