提问人:davidvera 提问时间:9/24/2020 最后编辑:davidvera 更新时间:9/24/2020 访问量:125
文件存在时无法使用 IO 或 NIO 删除文件 [已关闭]
Can't delete a file using IO or NIO while file exists [closed]
问:
在第一种方法中,我创建了一个文件,在处理完后需要删除该文件。为此,我使用输入流。处理后,必须从硬盘驱动器中删除名为 fileSrc 的文件。
我尝试了两种不同的方法来删除文件。
public File signPDF(File fileSrc) {
// signature process ...
boolean isDeleted = fileSrc.delete();
boolean isFileExist = fileSrc.exists();
logger.info("Is file exist ? - " + isFileExist);
if(isDeleted) {
logger.info("File has been deleted");
} else {
logger.warn("File could not be deleted");
}
// try to delete on java exit
Path path = Paths.get(fileSrc.toString());
try {
isFileExist = Files.deleteIfExists(path);
logger.info("File has been deleted with NIO: " + isFileExist);
} catch (IOException e) {
//deleting file failed
logger.warn("File could not be deleted with NIO: " + isFileExist);
e.printStackTrace();
}
return signedFile
}
在我的日志中,我注意到该文件没有被删除。 我卸载了在另一个方法中复制输入流的文件。古典主义地:
FileUtils.copyInputStreamToFile(inputStream, targetFile);
我尝试了几种方法来关闭连接和 inputStream
IOUtils.close(con);
inputStream.close();
IOUtils.closeQuietly(inputStream);
不幸的是,这些方法都没有奏效。
注意:由于@GyroGearless,修改文件路径(不正确)解决了此问题。最后,我遇到了第二个问题。该文件在被处理之前已被删除。 我用这个代码片段解决了这个问题:
File toDelete = new File(fileSrc + File.separator + docId + ".pdf");
try {
TimeUnit.SECONDS.sleep(30);
} catch (InterruptedException e) {
logger.error("InterruptedException " + e.getMessage());
e.printStackTrace();
}
toDelete.deleteOnExit();
答:
2赞
ArmDuke
9/24/2020
#1
当文件被其他应用程序打开时,或者应用程序无权删除文件时,无法先删除文件有两个原因。
评论
0赞
davidvera
9/24/2020
第三种选择是我的道路不正确。这是我的情况:)
评论
fileSrc.close();
printStackTrace()
Path
File
fileSrc.toPath()
InputStream