2012-05-04 27 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