通过FileUtils复制现有文件时出现java.io.FileNotFoundException

时间:2015-03-26 13:10:22

标签: java tomcat fileutils

我有问题。我尝试复制文件,我得到一个FileNotFound异常。这是我的代码:

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)
    ...

但该文件位于该文件夹中。

此代码在Tomcat中从JSF调用,因此可能是Tomcat direcories的问题。该文件是使用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);
    ...

1 个答案:

答案 0 :(得分:0)

我已经发现Java是" smart",因此Process Builder在单独的线程(甚至是进程)中运行,并且为了解决我的问题,我必须更改

ProcessBuilder pb = ...
pb.start()

ProcessBuilder pb = ...
Process p = pb.start()
p.waitFor()