我用java進程運行一個外部命令。 該命令是帶有一些db2命令的.bat文件。 當我想使用進程waiffor()返回結果時,我什麼也得不到。該程序必須是阻止的。java exec()運行db2 import命令,waitfor()永不返回
Java代碼:
.....
Runtime rt = Runtime.getRuntime();
Process p = null;
String command = "db2cmd -c -w -i C:/import1.bat";
p = rt.exec(command);
p.waitFor();
.....
import1.bat:
@echo off
db2 connect to text_DB user text using tesxt0114
db2 IMPORT FROM "C:\MVCMSInputFiles\IIS20121224180129.csv" OF DEL METHOD P (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) MESSAGES "C:\MVCMSInputFiles\20121224180129.log" INSERT INTO BLUEX.BIZ_MACHINE (MACHINE_SSERIALNO, MACHINE_STYPE, MACHINE_SPROJECTID, MACHINE_SCATEGORY, MACHINE_SNAME, MACHINE_SBRAND, MACHINE_SSPOT, MACHINE_SPRODUCEDATE, MACHINE_SSERVPERIOD, MACHINE_SENDDATE, MACHINE_SCONTRACTID, MACHINE_SSERVSTATUS, MACHINE_NSTATUS, MACHINE_SSCID, LOG_SLASTUSER, MACHINE_TSIMPORTTIME)
db2 connect reset
我也使用
p.getInputStream()
處理
InputStream
,但過程總是由第三命令是嵌段
(db2 import.....)
javacode:
Runtime rt = Runtime.getRuntime();
Process p = null;
String command = "db2cmd -c -w -i C:/import1.bat";
p = rt.exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = reader.readLine())!= null){
System.out.println(line);
}
reader.close();
while(true){
if (p.waitFor() == 0) break;
}
當我使用db2 export...
或db2 select * from ....
更換第三命令。函數waitfor
可以返回結果。該過程不能被阻止。
這太奇怪了。
1)閱讀鏈接自['exec' tag Wiki](http://stackoverflow.com/tags/runtime.exec/info)的Java World文章並實施建議。如果它不能解決問題,它至少會提供更多關於失敗的信息。 2)使用'ProcessBuilder'而不是'Runtime.exec()'3)將'String command'分解爲'String []命令'。 4)爲什麼在該帖子的代碼中空白'隔行'?它使它運行得更快嗎? 5)..你的問題是什麼? –