1

私は問題があります。ファイルをコピーしようとすると、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);
    ...
4

1 に答える 1

1

Java が「スマート」であることを理解したので、Process Builder は別のスレッド (またはプロセス) で実行されます。問題を解決するには、変更する必要があります。

ProcessBuilder pb = ...
pb.start()

ProcessBuilder pb = ...
Process p = pb.start()
p.waitFor()
于 2015-03-26T20:31:37.830 に答える