在java应用程序中执行iconv

时间:2011-05-31 10:03:04

标签: java iconv

我想将一个大的csv文件从gb2312编码转换为UTF-8编码。 这是我使用的代码:

Process process = Runtime.getRuntime().exec(
                String.format("iconv -c -f %1$s -t %2$s %3$s > %4$s",
                        sourceEncoding, targetEncoding, source, target));
        process.waitFor();

问题是proccess.waitFor()方法永远不会结束。看起来iconv正在等待我的输入,比如从命令行调用它并且不给出args。但是从终端的另一个会话。我可以看到iconv运行正确的参数。

root     16729  0.0  0.1 164076   812 pts/0    S+   23:00   0:00 iconv -c -f gb2312 -t utf-8 20110525.csv > 20110525.utf8.csv

如果我从终端手动输入命令,“iconv -c -f gb2312 -t utf-8 20110525.csv> 20110525.utf8.csv”命令正常工作。但是,如果我从java调用它,它就不起作用。

我调用iconv的双向启动目录具有相同的启动目录。

2 个答案:

答案 0 :(得分:3)

正如MByD所说,重定向标志是一个shell功能。

但是,不是抓住OutputStream而是从Java执行bash:

... .exec("bash -c 'iconv -c -f gb2312 -t utf-8 20110525.csv > 20110525.utf8.csv'")

答案 1 :(得分:2)

重定向符号(>)是shell / cmd功能,而不是java,从java执行进程时不能使用它。

您可以获取进程的OutputStream(InputStream is = process.getInputStream())并将其保存到文件中。