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

从java执行tr命令时获取太多参数出错,java,unix,Java,Unix,file=D:\Unix\tr.exe“Æ”“~”“D:\tgt” 当我使用以下java代码执行此命令时 processprocess=Runtime.getRuntime().exec(文件) 我得到以下错误 D:\Unix\tr.exe:参数太多 PS:文件包含Æ个字符,我正在尝试用替换所有这些字符~ 有什么建议吗?您必须自己编程io重定向。这通常是处理它的bash exec()调用的结果是一个进程。然后可以使用此进程获取进程的STDIN。使用该流将数据发送到该进程 按照您的调用方式,您可以

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

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

processprocess=Runtime.getRuntime().exec(文件)

我得到以下错误

D:\Unix\tr.exe:参数太多

PS:文件包含Æ个字符,我正在尝试用替换所有这些字符~


有什么建议吗?

您必须自己编程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
示例:

您在CMD中传递unicode,我想这就是问题的原因。 在CMD上设置
chcp xxx
,然后重试

有关chcp代码,请参阅下面的链接


能否准确地将您输入的内容发布到exec命令中?代码示例中构造的字符串文字不适用于java。@thst ya i knw,它看起来很笨拙,这就是我给出类似tat的结果的原因。下面我给出了实际的代码,字符串strBatchFileName=“D:\\eclipse\\lib\\Unx\\tr.exe\\\\\\\\\\\\\\\\\\\\\'C:\\SourceFiles\\source.csv\'>\\'D:\\copy\\\\\u A\\\\\\”;为什么不传递一个数组以避免担心引号?您解决了问题吗?如果问题仍未解决,最好接受一个有帮助的答案或提供更多细节。