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:文件包含Æ字符我试图用〜
替换所有这些字符有什么建议吗?
答案 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