2012-05-04 30 views
1

创建的文件进行任何操作,这就是我想实现: 运行Java程序的批处理文件。批处理在特定文件夹中创建一个新文件,比如文件夹'A'。一旦创建新文件,JAVA程序将新创建的文件从文件夹'A'移动到文件夹'B'。无法通过批量

以下是代码片段: 新文件被文件夹中的“A”发布:

// 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())); 

这是当我运行上面的代码会发生什么。但是,新创建的文件不会移动到文件夹“B”。

分析:

有一个在上面的代码中没有语法问题。 我试过移动文件的替代方法。即,将文件夹“A”中的文件读写到文件夹“B”,然后从文件夹“A”中删除该文件。新文件在文件夹'B'中创建,但文件不会从文件夹'B'中删除。 当我运行另一个试图移动文件的程序时,在执行上面的程序之后,它会起作用。也就是说,运行时对文件进行控制似乎存在问题。

请帮我解决。我浪费了整整一天的时间,试图找出解决方案:(

+1

如果您使用Java 7+:http://docs.oracle.com/javase/tu torial /本质/ IO/move.html – assylias

回答

3

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

所以,应该使用cmd /c batch.bat,这应该做工精细

+0

当我删除“开始”参数,批没跑的。 – user1375124

+0

假设你也需要删除'/ min'。这肯定是做正确的方式,因此,如果它不能在工作第一,不要放弃。 –

+0

即使在删除/ min之后它也不起作用。 – user1375124