这是我想要实现的目标: 从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”中删除。 当我运行另一个试图移动文件的程序时,执行上述程序后,它可以工作。也就是说,运行时控制文件似乎存在问题。
请帮我解决问题。我浪费了一整天来试图找到解决方案:(
答案 0 :(得分:3)
通过使用cmd /c start ...
启动批处理文件,您将异步启动它 - 即,cmd.exe
正在创建第二个进程来运行批处理文件,而proc.waitFor()
是等待原始cmd.exe
,但不是等待批处理文件本身。批处理文件随后与Java程序并行运行,并且在创建文件之前尝试从Java重命名该文件。
相反,只需使用cmd /c batch.bat
,这应该可以正常工作。