gpt4 book ai didi

java - 无法删除文件 Java

转载 作者:行者123 更新时间:2023-12-01 19:07:34 28 4
gpt4 key购买 nike

我有一个方法可以获取 .txt 文件的最后一行,并创建一个没有该行的新临时文件。但是,当我尝试删除包含我想要删除的行的 .txt 时(这样我就可以重命名临时文件),由于某种原因我不能删除。这是代码:

void removeFromLocal() throws IOException {
String lineToRemove = getLastLine();
File inputFile = new File("nexLog.txt");
File tempFile = new File("TempnexLog.txt");
BufferedReader reader = null;
BufferedWriter writer = null;
try {

reader = new BufferedReader(new FileReader(inputFile));
writer = new BufferedWriter(new FileWriter(tempFile));

String currentLine;
int i = 0;
while ((currentLine = reader.readLine()) != null) {
i++;
String trimmedLine = currentLine.trim();
if (!trimmedLine.equals(lineToRemove)) {
if (i != 1) {
writer.newLine();
}
writer.write(currentLine);
}
}
reader.close();
reader = null;
writer.flush();
writer.close();
writer = null;
System.gc();

inputFile.setWritable(true);

if (!inputFile.delete()) {
System.out.println("Could not delete file");
return;
}


if (!tempFile.renameTo(inputFile)) {
System.out.println("Could not rename file");
}
//boolean successful = tempFile.renameTo(inputFile);
} catch (IOException ex) {
Logger.getLogger(dropLog.class.getName()).log(Level.SEVERE, null, ex);
}
}

有趣的是,当我按下调用该方法的按钮一次时,没有任何反应(“无法删除文件”),第二次它工作正常,第三次我得到“无法重命名文件”。

最佳答案

文件被其他进程打开后无法删除。例如。在记事本等中,甚至可能在代码中其他位置的文件上使用另一个 FileReader/FileWriter 。此外,当您在 IDE 中执行此操作时,您将面临 IDE 在后台扫描项目文件夹中的修改期间触及文件的风险。而是将文件存储在 IDE 项目之外的绝对路径中。

此外,必须修改打开和关闭文件的代码流程,以便在 finally block 中执行关闭。成语是这样的:

Reader reader = null;

try {
reader = new SomeReader(file);
// ...
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}

或者,如果您已经使用 Java 7,请使用 automatic resource management相反。

try (Reader reader = new SomeReader(file)) {
// ...
}

此外,我建议使用 File#createTempFile()而不是创建临时文件。这样,将生成一个唯一的临时文件名,从而防止多个进程写入和重命名同一个临时文件。

File tempFile = File.createTempFile("nexLog", ".txt");

关于java - 无法删除文件 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502983/

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