2015-03-26 5 views
0

У меня проблема. Я пытаюсь скопировать файл, и я получаю исключение FileNotFound. Вот мой код:java.io.FileNotFoundException при копировании существующего файла через FileUtils

File file = new File("C:\\.DS\\tmp\\client-" + node_id + ".war"); 
File dir = new File("D:\\Utils\\Apache\\Tomcat\\webapps"); 
try { 
    FileUtils.copyFileToDirectory(file, dir); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

И исключение:

java.io.FileNotFoundException: Source 'C:\.DS\tmp\client-022.war' does not exist 
    at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1074) 
    at org.apache.commons.io.FileUtils.copyFileToDirectory(FileUtils.java:1013) 
    ... 

Но файл находится в этой папке.

Этот код вызывается из JSF в Tomcat, поэтому, возможно, это проблема точных копий Tomcat. Файл генерируется в предыдущей функции через внешнюю команду с помощью ProcessBuilder, поэтому, возможно, Java пытается параллелизировать, а ProcessBuilder завершает работу после завершения копирования.

Кроме того, в другом методе одного и того же класса, этот код работает отлично:

File file = new File("C:\\.DS\\tmp\\client-" + node_id + ".properties"); 
File dir = new File("C:\\.DS\\ss\\engines"); 
try { 
    FileUtils.copyFileToDirectory(file, dir); 
    ... 
+0

Не уверен. Если у вас есть Java 7 или новее, используется 'java.nio.files.Files' [' copy'] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files. html # copy-java.nio.file.Path-java.nio.file.Path-java.nio.file.CopyOption ...-) имеют ту же проблему? Обратите внимание, что это работает на 'Path', поэтому вам нужно использовать '' toPath' файла '(http://docs.oracle.com/javase/8/docs/api/java/io/File .html # toPath--), чтобы получить правильный тип объекта. – Powerlord

ответ

0

Я понял, что Java является «умный», так Process Builder выполняется в отдельном потоке (или даже процесс), и исправить мою проблему, я должен изменить

ProcessBuilder pb = ... 
pb.start() 

в

ProcessBuilder pb = ... 
Process p = pb.start() 
p.waitFor() 
Смежные вопросы