Java Can';当文件存在时,不要使用IO或NIO删除文件

Java Can';当文件存在时,不要使用IO或NIO删除文件,java,io,nio,Java,Io,Nio,在第一种方法中,我创建了一个文件,在处理后需要删除该文件。为此,我使用一个输入流。经过处理后,名为fileSrc的文件必须从硬盘中删除 我尝试了两种不同的方法来删除该文件 public File signPDF(File fileSrc) { // signature process ... boolean isDeleted = fileSrc.delete(); boolean isFileExist = fileSrc.exists(); logger.

在第一种方法中,我创建了一个文件,在处理后需要删除该文件。为此,我使用一个输入流。经过处理后,名为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
}
在我的日志中,我注意到该文件没有被删除。 我不加载文件,而是用另一种方法复制inputstream。经典地说:

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();

当文件被另一个应用程序打开或您的应用程序没有删除该文件的权限时,您无法先删除该文件有两个原因。

当文件被另一个应用程序打开或您的应用程序没有删除该文件的权限时,您无法先删除该文件有两个原因。

你要关闭你的文件吗<代码>fileSrc.close()文件没有关闭方法。。。但是我关闭了检索文件数据的输入流。请您提供
printStackTrace()
的输出好吗?FWIW,要从
文件创建
路径
,只需使用
文件rc.toPath()
@davidvera让我重写一下,您是否关闭了您提到的所有
输入流
(并且没有提供)?你关闭文件了吗<代码>fileSrc.close()文件没有关闭方法。。。但是我关闭了检索文件数据的输入流。请您提供
printStackTrace()
的输出好吗?FWIW,要从
文件创建
路径
,只需使用
文件rc.toPath()
@davidvera让我重写一下,您是否关闭了您提到的所有
输入流
(并且没有提供)第三种选择是我的路径不正确。这是我的情况:)第三个选择是我的路径不正确。这是我的情况:)
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
}