peihuanhuan / baiduPanSDK

百度云盘 Java SDK
4 stars 1 forks source link

调用uploadFile上传某个文件后,再删除该文件会提示“另一个程序正在使用此文件,进程无法访问。” #1

Open netbuffer opened 1 year ago

netbuffer commented 1 year ago

感谢作者的分享,最近在我们的springboot工程中使用这个库整合了文件上传到百度云盘的功能,但遇到了个问题反馈下看看

使用的版本:

<dependency>
    <groupId>net.peihuan</groupId>
    <artifactId>baidu-pan-starter</artifactId>
    <version>1.3.2</version>
</dependency>

示例代码

File outputFile = new File("d:/1.zip");
CreateResponseDTO createResponseDTO = baiduService.getPanService().uploadFile("1", "/" + fileName, outputFile, RtypeEnum.OVERRIDE);
FileUtils.forceDelete(outputFile);

在删除文件的时候会提示错误:

Caused by: java.nio.file.FileSystemException: D:\1.zip: 另一个程序正在使用此文件,进程无法访问。
    at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
    at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:275)
    at java.base/sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:110)
    at java.base/java.nio.file.Files.deleteIfExists(Files.java:1191)
    at org.apache.commons.io.file.PathUtils.deleteFile(PathUtils.java:570)
    at org.apache.commons.io.file.PathUtils.delete(PathUtils.java:476)
    at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1337)

我们用的Java语言,对kotlin不够了解,不清楚是不是类库中没有释放文件资源?

peihuanhuan commented 1 year ago

是其他地方在使用该文件,换一个新文件试试。 或者查询哪个进程持有该文件的句柄: https://blog.csdn.net/xiexiaotian11/article/details/89013272

netbuffer commented 1 year ago

感谢作者耐心回复,我定位到占用文件的进程就是当前java程序本身!停止java程序后,文件就能删除了

这是我的springboot工程下的测试代码,我通过该接口上传一个文件后,再去windows操作系统下找到这个文件进行删除,windows系统提示被Java程序占用,当我停止springboot工程后,再去删除刚刚的文件,就能删除了

@RequestMapping("upload")
    public CreateResponseDTO upload(String name, String file) {
        log.debug("upload file name={} file path={}", name, file);
        CreateResponseDTO createResponseDTO = baiduService.getPanService().uploadFile("1", "/" + name, new File(file), RtypeEnum.OVERRIDE);
        return createResponseDTO;
    }

图片 停止springboot工程后,删除操作 图片

peihuanhuan commented 1 year ago

抱歉没有收到你回复的通知,现在还有这个问题吗?

netbuffer commented 1 year ago

抱歉没有收到你回复的通知,现在还有这个问题吗?

上方已经给出过反馈哈,删除不掉