Ошибка: java.io.IOException: дескриптор недействителен

Я пытаюсь переместить файл из одного места в другое. Когда я запускаю.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
(destination = // uk001 / eucl / Email_Broker_Archive, File.separator = '\', source.getName () = mime-message - 7431406574003289236.eml

LOG.info(source.getAbsolutePath()) регистрируется ниже пути

\uk001\eucl\Source\0002\ мим-сообщения - 7431406574003289236.eml

Разрешение R/W существует как для учетной записи службы (cmd и планировщик Robot), так и для приложения, работающего на сервере Windows.

1 ответ

Кажется, это проблема разделителя файлов, который не соответствует разделителю файлов ОС.

//uk001/eucl/Email_Broker_Archive\mime-message--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.
 }
Другие вопросы по тегам