我尝试在 java 中运行这个 shell,但它从来没有工作过。
Process p = Runtime.getRuntime().exec(" cat *.java|sed '/import/d'|sed'/package/d'>>b.java ");
当我将 cmd 更改为“ls
”或“open foo.java
”之类的内容时,代码将起作用。
知道为什么吗?
最佳答案
问题是文件通配符模式没有通过 glob 扩展。 。因此,该模式按字面意思处理,并且找不到该文件。您需要一个诸如 bash
之类的 shell 来解释此内容:
Process p = Runtime.getRuntime().exec(new String[] {
"bash", "-c",
"cat *.java|sed '/import/d'|sed'/package/d'>>b.java" });
请务必检查 getErrorStream 的内容.
旁白:考虑使用更方便的 ProcessBuilder它使用可变参数数组来构建命令String
。
关于Java不会执行cmd行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16227418/