无法对批处理创建的文件执行任何操作

时间:2012-05-04 14:05:29

标签: java

这是我想要实现的目标: 从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”中删除。   当我运行另一个试图移动文件的程序时,执行上述程序后,它可以工作。也就是说,运行时控制文件似乎存在问题。

请帮我解决问题。我浪费了一整天来试图找到解决方案:(

1 个答案:

答案 0 :(得分:3)

通过使用cmd /c start ...启动批处理文件,您将异步启动它 - 即,cmd.exe正在创建第二个进程来运行批处理文件,而proc.waitFor()是等待原始cmd.exe,但不是等待批处理文件本身。批处理文件随后与Java程序并行运行,并且在创建文件之前尝试从Java重命名该文件。

相反,只需使用cmd /c batch.bat,这应该可以正常工作。