文件存在时无法使用 IO 或 NIO 删除文件 [已关闭]

Can't delete a file using IO or NIO while file exists [closed]

提问人:davidvera 提问时间:9/24/2020 最后编辑:davidvera 更新时间:9/24/2020 访问量:125

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

3年前关闭。

在第一种方法中,我创建了一个文件,在处理完后需要删除该文件。为此,我使用输入流。处理后,必须从硬盘驱动器中删除名为 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();
Java IO NIO

评论

1赞 IQbrod 9/24/2020
你关闭了你的文件吗?fileSrc.close();
1赞 davidvera 9/24/2020
java.io.File 中的文件没有关闭方法...但是我关闭了检索文件数据的输入流。
1赞 Gyro Gearless 9/24/2020
您能否提供 的输出?printStackTrace()
1赞 Gyro Gearless 9/24/2020
FWIW,要从 a 制作 ,只需使用PathFilefileSrc.toPath()
0赞 IQbrod 9/24/2020
@davidvera让我重新措辞一下,你是否关闭了你提到的(但没有提供)的每一个?InputStream

答:

2赞 ArmDuke 9/24/2020 #1

当文件被其他应用程序打开时,或者应用程序无权删除文件时,无法先删除文件有两个原因。

评论

0赞 davidvera 9/24/2020
第三种选择是我的道路不正确。这是我的情况:)