【问题标题】:java.io.FileNotFoundException when copying existing file via FileUtils通过 FileUtils 复制现有文件时出现 java.io.FileNotFoundException
【发布时间】:2015-03-26 13:10:22
【问题描述】:

我有问题。我尝试复制文件,但出现 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 7 或更新版本,java.nio.files.Files copy 是否有同样的问题?请注意,这对Paths 起作用,因此您必须使用FiletoPath 来获取正确的对象类型。

标签: java tomcat fileutils


【解决方案1】:

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

ProcessBuilder pb = ...
pb.start()

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

【讨论】:

    猜你喜欢
    • 2014-12-28
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多