java.nio.file.Files.move(Path source,Path target,CopyOption ... options)从源文件中消失

时间:2017-12-12 09:06:09

标签: java nio

我正在使用java.nio.file.Files.move(Path source,Path target,CopyOption ... options)方法在Windows和Linux上将文件从源移动到目标。

代码:

 public void purgeProcessedFile(File xmlFile, String fileDestination) {
        logger.info("Started purging.");
        File directory = new File(fileDestination);
        if (!directory.exists()) {
            directory.mkdirs();
        }
        File destFile = new File(fileDestination + File.separator + xmlFile.getName());
        logger.info("XML file path is : " + xmlFile.getPath());
        logger.info("dest File path is : " + destFile.getPath());
        if (!destFile.exists()) {
            //if (xmlFile.renameTo(destFile)) {
            try {
                Files.move(FileSystems.getDefault().getPath(xmlFile.getPath()),
                        FileSystems.getDefault().getPath(destFile.getPath()), StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                //throw LoggedException.wrap(logger, "Unexpected IOException", e);
                logger.info("File purging failed.");
                logger.error(e);
            }
            logger.info("File purged successfully.");
            /* } else {
                 logger.info("File purging failed.");
             }*/
        } else {
            logger.info("File with same name already exists at destination folder: " + fileDestination);
        }

        logger.info("Ended purging.");
    }

预期结果:

要移动到目标目录的文件。

实际结果:

文件正从源中删除,而不是移动到目标目录。

日志中的

java.nio.file.NoSuchFileException:  source location.

被抛出。

由于这是平台独立的期望,因此能够在Windows和Linux上工作。

1 个答案:

答案 0 :(得分:1)

可能FileSystems.getDefault()对网络驱动器无效。 在新的Path/Paths/Files样式中:

public void purgeProcessedFile(File xmlFile, String fileDestination) {
    Path destFile = Paths.get(fileDestination, xmlFile.getName());
    Path directory = destFile.getParent();
    if (!Files.exist(directory)) {
        Files.createDirectories(directory);
    }
    if (!Files.exists(destFile)) {
        try {
            Files.move(xmlFile.toPath(), destFile, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            logger.error(e);
        }
    } else {
        logger.info("File with same name already exists at destination folder: "
                + fileDestination);
    }
}

那说,我希望消失的文件驻留在创建的目录中的本地计算机上,可能类似于C:/ F / My / XML / Data。