我正在使用 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 btw)。 请告知如何解决此问题。
UPDATE:使用以下有用的方法,我可以得到文件已打开,有任何想法如何关闭它?
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.";
}
}
答案 0 :(得分:1)
如果文件是打开的,那么有两种解决方案:
您的程序中有一个流在此文件上打开。请注意,afaik在Windows上存在问题,使用Unix我即使在其上打开了流也可以删除文件。
您还有另一个使用此文件的进程。所以在这种情况下,你无法从Java做任何事情。
在日志中它还告诉它可能是权限问题,你确定你有足够的权限吗?
您还可以使用Files#delete(Path path)(jdk7)获取有关此问题的更多详细信息。