【发布时间】:2014-05-25 03:35:19
【问题描述】:
当我使用 Runtime.getRuntime.exec() 从 Java 运行命令时,我遇到了一个有趣的问题。我的代码的以下部分基本上将 doc 文件转换为 txt 文件。 catdoc 是一个将输入文件转换为文本流并输出到标准输出的工具。输出比重定向到 txt 文件。它对于某些文档文件非常有效,但是对于某些特定文档文件它会挂起。
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 命令,它产生了正确的结果。所以,输入文件没有问题。
【问题讨论】:
-
首先找到它挂起的文档,然后尝试仅在该文档上运行该命令以查找特定错误...无论如何我的猜测是它正在运行该命令的文档中没有'不存在
-
我做到了。相同的命令运行并在终端中为 runtime.exec() 挂起的文件生成所需的结果。我会更新我的问题。
-
'p1.getErrorStream()' 检查这个InputStream是否有错误
-
@fmodos 没有生成错误消息。基本上,程序挂了
Process p1= Runtime.getRuntime().exec(strArr1); -
你能贴出没有运行的命令的 strArr1 值吗?数组中的值是什么?
标签: java runtime.exec