これは私が達成しようとしているものです: JAVAプログラムからバッチファイルを実行してください。バッチは特定のフォルダに新しいファイルを作成し、フォルダ 'A'としましょう。新しいファイルが作成されると、JAVAプログラムは新しく作成されたファイルをフォルダ 'A'からフォルダ 'B'に移動します。続きバッチで作成されたファイルに対して操作を実行できません
は、コードスニペットです:
// Run a batch that creates a file
String[] cmd = new String[]{"cmd", "/C", "start /min" + batchFilePath + batchFileName};
Process proc = Runtime.getRuntime().exec(cmd);
proc.waitFor();
// Command in the batch file
dir c:\ > C:\Chen_Med\EDICron\EDIOUT\test.edi
exit
// Move the file created by batch
boolean result2= ediOutFile.renameTo(new File(processedFolder, ediOutFile.getName()));
は、これは私が上記のコードを実行したときに何が起こるかです: 新しいファイルは、フォルダ「A」で作成されます。ただし、新しく作成されたファイルはフォルダ 'B'に移動されません。
分析:
上記のコードには構文上の問題はありません。 ファイルを移動する代わりに試しました。つまり、フォルダ 'A'からフォルダ 'B'に読み書きした後、フォルダ 'A'からファイルを削除します。新しいファイルがフォルダ 'B'に作成されますが、ファイルはフォルダ 'B'から削除されません。 ファイルを移動しようとする別のプログラムを実行すると、上記のプログラムが実行された後に動作します。つまり、ファイルに対する制御を保持しているランタイムに問題があるようです。
解決策を教えてください。すなわち、cmd.exe
は、バッチファイルを実行するための第二のプロセスを作成している、と - 私はあなたが非同期的に開始している、バッチファイルを起動するcmd /c start ...
を使用することにより
Java 7+を使用している場合:http://docs.oracle.com/javase/tu torial/essential/io/move.html – assylias