當我使用Runtime.getRuntime.exec()從Java運行命令時,我遇到了一個有趣的問題。我的代碼的以下部分基本上將doc文件轉換爲txt文件。 catdoc是一個將輸入文件轉換爲文本流並將其輸出到標準輸出的工具。輸出比重定向到一個txt文件。它對於某些文檔文件來說工作得很好,但是對於某些特定的文檔文件而言,它會掛起。Runtime.getRuntime.exec()掛起在不同情況下運行的相同命令
String[] strArr1 = new String[]{"catdoc", docFilePath};
Process p1= Runtime.getRuntime().exec(strArr1);
p1.waitFor();
BufferedReader b = new BufferedReader(new InputStreamReader(p1.getInputStream()));
FileWriter writeoutStream = new java.io.FileWriter(file.txt);
while ((line = b.readLine()) != null) {
writeoutStream.write(line);
writeoutStream.write('\n');
}
writeoutStream.close();
b.close();
我有許多文檔文件,這段代碼段在一些文件上工作,但它掛在其中一個文件上,並且沒有響應。我懷疑這可能是由文檔文件的大小造成的。那可能嗎?我想知道是否有什麼方法可以解決這個問題。
更新:我知道哪些文件導致運行時凍結。我嘗試在這些文件上使用catdoc命令,它會產生正確的結果。所以,輸入文件沒有錯。
首先找到它掛起的文檔,並嘗試僅在該文檔上運行該命令以查找特定錯誤......無論如何,我的猜測是它在不存在的文檔中運行命令 – fmodos
做到了。運行相同的命令並在終端中爲runtime.exec()掛起的文件生成期望的結果。我會更新我的問題。 – Lorderon
'p1.getErrorStream()'檢查此InputStream中是否有任何錯誤 – fmodos