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

通过FileUtils复制现有文件时发生java.io.FileNotFoundException,java,tomcat,fileutils,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

我有个问题。我试图复制一个文件,但得到一个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目录的问题。该文件是在前面的函数中使用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);
    ...

我发现Java是“智能”的,所以Process Builder在单独的线程(甚至进程)中运行,为了解决我的问题,我必须改变

ProcessBuilder pb = ...
pb.start()


不确定。如果您有Java7或更高版本,
Java.nio.files.files
是否也有同样的问题?请注意,这在路径上运行,因此您必须使用文件来获得正确的对象类型。
ProcessBuilder pb = ...
Process p = pb.start()
p.waitFor()