我正在使用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上工作。
答案 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。