从java执行tr命令时获取太多参数错误

时间:2015-04-07 13:07:39

标签: java unix

file = D:\Unix\tr.exe "Æ" "~" < "C:\SourceFiles\source.csv" > "D:\tgt"

当我使用java中的以下代码执行此命令时

Process process = Runtime.getRuntime().exec(file);

我收到以下错误

D:\Unix\tr.exe: too many arguments

PS:文件包含Æ字符我试图用〜

替换所有这些字符

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您必须自己编程io重定向。这通常是照顾它的bash。

exec()调用的结果是一个过程。然后可以使用此过程获取进程的STDIN。使用该流将数据发送到该进程。

您调用它的方式是,您向tr发送另一个命令行选项,即<>重定向器和文件名。

 Process process = System.getRuntime().exec(strBatchFileName);
 OutputStream stdin = process.getOutputStream();
 sendFileToStream(out);
 InputStream stdout = process.getInputStream();
 loadResultFromStream(stdout);

这是一个伪代码示例,其中sendFileToStream(...)将输入文件提供给TR流程,loadResultFromStream(...)将加载结果。

如果数据大于流的缓冲区,则可能需要利用线程来提供和读取。

问题有点重复,您会在此处找到ProcessBuilder示例:Runtime's exec() method is not redirecting the output

答案 1 :(得分:0)

你在CMD中传递unicode,我猜这会导致问题。 在CMD上设置chcp xxx并尝试。

请参阅下面的chcp代码链接

https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/chcp.mspx?mfr=true