【问题标题】:Issue while moving file using java.nio使用 java.nio 移动文件时出现问题
【发布时间】:2019-10-29 11:02:21
【问题描述】:

在重命名文件后尝试移动文件时出现以下异常,问题是它间歇性发生,即有时代码有效,有时无效且不可复制,如果有人能提供有关相同的见解,将会很有帮助

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

【问题讨论】:

    标签: java nio


    【解决方案1】:

    旧的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 的使用似乎添加了完整路径。

    (在多余的.toString() 之上只是提醒getFileName() 返回一个Path。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多