FileUtil.copyFile()实际效果与注释不一致
Closed this issue · 1 comments
LeonemZhang commented
版本情况
JDK版本: oraclejdk_8_202
hutool版本: 5.8.27(请确保最新尝试是否还有问题)
问题描述(包括截图)
方法注释说目的文件不存在会创建,但是实际运行的时候会报NoSuchFileException,显然是没有创建出目的文件
- 复现代码
URL url = new URL(fileUrl);
URLConnection connection = url.openConnection();
String fileName = url.getFile().substring(url.getFile().lastIndexOf('/') + 1);
final File downloadFile = FileUtil.file(destFolderPath, fileName);
try (InputStream inputStream = connection.getInputStream()) {
log.info("开始下载文件:{}", fileUrl);
FileUtil.copyFile(inputStream, downloadFile, StandardCopyOption.REPLACE_EXISTING);
log.info("文件已下载到:{}", destFolderPath);
}
- 堆栈信息
cn.hutool.core.io.IORuntimeException: NoSuchFileException: C:\test\Snipaste-2.8.8-Beta-x64.zip
at cn.hutool.core.io.file.PathUtil.copyFile(PathUtil.java:223)
at cn.hutool.core.io.FileUtil.copyFile(FileUtil.java:1072)
at com.zzsn.download.FileDownloader.downloadFile(FileDownloader.java:26)
at com.zzsn.download.FileDownloader.main(FileDownloader.java:41)
Caused by: java.nio.file.NoSuchFileException: C:\test\Snipaste-2.8.8-Beta-x64.zip
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:434)
at java.nio.file.Files.newOutputStream(Files.java:216)
at java.nio.file.Files.copy(Files.java:3016)
at cn.hutool.core.io.file.PathUtil.copyFile(PathUtil.java:221)
... 3 common frames omitted
cn.hutool.core.io.IORuntimeException: NoSuchFileException: C:\test\Snipaste-2.8.8-Beta-x64.zip
at cn.hutool.core.io.file.PathUtil.copyFile(PathUtil.java:223)
at cn.hutool.core.io.FileUtil.copyFile(FileUtil.java:1072)
at com.zzsn.download.FileDownloader.downloadFile(FileDownloader.java:26)
at com.zzsn.download.FileDownloader.main(FileDownloader.java:41)
Caused by: java.nio.file.NoSuchFileException: C:\test\Snipaste-2.8.8-Beta-x64.zip
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:434)
at java.nio.file.Files.newOutputStream(Files.java:216)
at java.nio.file.Files.copy(Files.java:3016)
at cn.hutool.core.io.file.PathUtil.copyFile(PathUtil.java:221)
... 3 more
looly commented
确实存在这个问题。
问题在于:
- 如果只是文件不存在,则不会报错
- 如果文件所在目录不存在,则会报错。
5.8.28 修复此问题!