java - 使用 java.nio 移动文件时出现问题
问题描述
在重命名文件后尝试移动文件时遇到异常,问题是它间歇性地发生,即有时代码有效,有时代码无效且不可复制,如果有人可以提供有关相同的见解,将会很有帮助
Caused by: java.nio.file.AccessDeniedException: /data/Inprocess/DEMO.20191026.csv -> /data/Inprocess/DEMO.20191026.csv.inprogress
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:457)
at sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262)
at java.nio.file.Files.move(Files.java:1395)
Path fromPath = inputFile.toPath();
Path toPath = new File(inputFile.getAbsolutePath() + ".inprogress").toPath();
LOGGER.info("Moving file to Path: " + inputFile.getAbsolutePath() + ".inprogress");
try {
Files.move(fromPath, fromPath.resolveSibling(toPath),StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
// Handle Exception
throw new TradeProcessorException("Error while marking file Inprogress: ", e);
}
解决方案
File
旧的(纯磁盘文件/目录)和更新的、更强大的之间的一个区别Path
是,后者维护其“文件”系统(可以是 zip、ram 磁盘、远程磁盘)。因此,一旦使用 Path,请继续使用它。
Path fromPath = inputFile.toPath();
String toName = inputFile.getFileName().toString() + ".inprogress";
Path toPath = inputFile.resolveSibling(toName);
LOGGER.info("Moving file to Path: " + toPath);
try {
Files.move(fromPath, toPath, StandardCopyOption.REPLACE_EXISTING);
您对 resolveSibling 的使用似乎添加了完整路径。
(以上多余的只是一个返回a.toString()
的提醒。)getFileName()
Path
推荐阅读
- batch-file - cmd新窗口存储输出
- spring-boot - 在 spring boot 2.1.1 自动配置中没有调用 addInterceptors
- broadleaf-commerce - 在“关于我们”的页面上写下 Broadleaf Commerce
- php - 将数组移动 N 并保留原始数组
- python - 将正态分布转换为 softmax
- python - 我如何获得当前 FFT 阵列的频率?
- jquery - 如果未单击链接,则使用 var max 6 循环并保留空值
- angular - Angular Agm/core map 不能与 observable 一起使用异步显示地图并动态添加标记
- sapui5 - 如何在ui5中创建全局变量?
- r - 将日志文件中的多行消息加入 R 中的单行