gpt4 book ai didi

java - 重命名后无法删除文件(文件已打开)

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:02 25 4
gpt4 key购买 nike

我正在使用 icefaces 将文件上传到我的网络应用程序 (mywebapp/audio) 中的相对路径,然后在文件上传后,我将其重命名以保存其扩展名,如下所示:

public static File changeExtToWav(FileInfo fileInfo,
StringBuffer originalFileName) {
log.debug("changeExtToWav");
int mid = fileInfo.getFile().getName().lastIndexOf(".");
String fileName = fileInfo.getFile().getName().substring(0, mid);
originalFileName.append(fileName);
log.debug("originalFileName: " + originalFileName);
String newFileName = fileName + "_" + new Date().getTime() + "."
+ "wav";
File newFile = new File(fileInfo.getFile().getParent() + "/"
+ newFileName);
log.debug("newFileName: " + newFile.getName());
fileInfo.getFile().renameTo(newFile);
return newFile;
}

文件上传后,有时我想从 UI 按钮中删除它,如下所示:

try {

File fileToDelete = new File(filePath); // correct file path
log.debug("file exists: " + fileToDelete.exists()); // true
fileToDelete.delete();
} catch (Exception e) {
e.printStackTrace();
}

文件路径是正确的,我没有遇到任何异常,但文件没有被删除(顺便说一句,我使用的是java 6)。请告知如何解决此问题。

更新:使用以下有用的方法,我可以得到文件已打开,有什么想法如何关闭它吗?

public String getReasonForFileDeletionFailureInPlainEnglish(File file) {
try {
if (!file.exists())
return "It doesn't exist in the first place.";
else if (file.isDirectory() && file.list().length > 0)
return "It's a directory and it's not empty.";
else
return "Somebody else has it open, we don't have write permissions, or somebody stole my disk.";
} catch (SecurityException e) {
return "We're sandboxed and don't have filesystem access.";
}
}

最佳答案

如果文件已打开,则有两种解决方案:

  • 您的程序中有一个在此文件上打开的流。请注意,据我所知,这是 Windows 上的问题,而在 Unix 上,即使在文件上打开了流,我也可以删除文件。

  • 您有其他进程正在使用此文件。因此,在这种情况下,您无法通过 Java 执行任何操作。

日志中还指出这可能是权限问题,您确定您有足够的权限吗?

您还可以使用Files#delete(Path path) (jdk7) 了解有关该问题的更多详细信息。

关于java - 重命名后无法删除文件(文件已打开),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11382793/

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