gpt4 book ai didi

java - 为什么使用 java io api 创建文件后不删除该文件?

转载 作者:行者123 更新时间:2023-12-01 19:22:35 25 4
gpt4 key购买 nike

我创建了一个文件并向其中添加了一些内容。然后,我想用java api删除它。在此操作之前,写出流已关闭,但仍然失败,有人可以帮我解决这个问题吗?

代码片段:

private static void _saveLogFile(String logContent, String urlPathName) throws Exception {

try {

StringBuilder sb = new StringBuilder("");
sb.append(logContent + "\r\n");
String a = sb.toString();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(urlPathName, true)));
bw.write(a);
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

private static void _deleteLogFile(String urlPathName) throws Exception {


File file = new File(urlPathName);
if (!file.exists()) {
throw new IllegalArgumentException("Delete: no such file or directory: " + urlPathName);
}

if (file.isDirectory()) {
String[] files = file.list();
if (files.length > 0) {
throw new IllegalArgumentException("Delete: directory is not empty: " + urlPathName);
}
}

boolean success = file.delete();
if (!success) {
throw new IllegalArgumentException("Delete:deletion failed.");
}
}

最佳答案

您的代码是正确的,但只是容易出现资源泄漏。只要 bw.write(a) 不抛出异常,bw.close() 就会成功。您应该在 finally block 中执行 close,以确保无论异常如何都会发生。

BufferedWriter bw = null;
try {
bw = new BufferedWriter(...);
bw.write(...);
} finally {
if (bw != null) try { bw.close(); } catch (IOException logOrIgnore) {}
}

回到实际问题,症状表明其他东西仍然使文件保持打开状态。当程序仍在运行时,您是否可以从平台的 shell(Windows 资源管理器等)内部删除它?对于 Windows,有多种工具可以检查文件是否仍处于锁定状态,如果是,则通过什么过程进行。

<小时/>

这是一个SSCCE 。只需复制、粘贴、运行即可,无需更改。在我的机器上运行良好。请在您的计算机上运行它并在必要时进行更改,以便它至少与实际编码相匹配,从而仍然重现/展示您的问题。

package mypackage;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class Test {

public static void main(String args[]) throws Exception {
File file = new File("/test.txt");
for (int i = 0; i < 1000; i++) {
write("line" + i, file); // Write "many" lines.
}
System.out.println("File exist before delete? " + file.exists());
System.out.println("File deleted? " + file.delete());
System.out.println("File exist after delete? " + file.exists());
}

public static void write(String line, File file) throws IOException {
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
writer.write(line);
} finally {
if (writer != null) try {
writer.close();
} catch (IOException e) {
System.err.println("Close failed!");
e.printStackTrace();
}
}
}
}

输出(如预期):

File exist before delete? trueFile deleted? trueFile exist after delete? false

在 Windows XP 上使用 JDK 1.6.0_21。

关于java - 为什么使用 java io api 创建文件后不删除该文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308838/

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