我正在尝试将文件从一个位置移动到另一个位置 当我通过命令提示符运行.jar时,它工作正常但是当jar从机器人调度程序(具有不同的服务帐户)被触发时得到以下错误
java.io.IOException: The handle is invalid
at java.io.WinNTFileSystem.canonicalize0(Native Method)
at java.io.WinNTFileSystem.canonicalize(Unknown Source)
at java.io.File.getCanonicalPath(Unknown Source)
at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1076)
at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1040)
我用于fileMove的方法在
之下public static Boolean fileMove(File source, String destination) {
LOG.info(destination + File.separator + source.getName());
LOG.info(source.getAbsolutePath());
File dest = new File(destination + File.separator + source.getName());
try {
FileUtils.copyFile(source, dest);
return FileUtils.contentEquals(source, dest) && Files.deleteIfExists(source.toPath());
} catch (IOException e) {
LOG.warn("IO Error Occurred during file Operations", e);
return false;
}
}
LOG.info(destination + File.separator + source.getName())
正在路径下方记录
//uk001/eucl/Email_Broker_Archive\mime-message--7431406574003289236.eml
的 (目的地= // uk001 /的EuCl / Email_Broker_Archive,
File.separator ='\',source.getName()= mime-message - 7431406574003289236.eml
LOG.info(source.getAbsolutePath())
正在记录路径
\ uk001 \的EuCl \源\ 0002 \ MIME的邮件 - 7431406574003289236.eml
R / W对于服务帐户(cmd和Robot调度程序)都有权限,并且应用程序正在Windows服务器上运行。
答案 0 :(得分:0)
似乎是文件分隔符与OS的文件分隔符不匹配的问题。
<强> // uk001 /的EuCl / Email_Broker_Archive \ MIME消息 - 7431406574003289236.eml 强>
请更换并检查\是否是问题。 另外,在复制文件之前,请先检查文件是否存在。
if (!Files.exists(dest)) {
FileUtils.copyFile(source, dest);
return FileUtils.contentEquals(source, dest) && Files.deleteIfExists(source.toPath());
//Modify the check above accordingly as the file exists check is already done.
}