代码之家  ›  专栏  ›  技术社区  ›  dave

Java,系统命令无法运行

  •  2
  • dave  · 技术社区  · 15 年前

    我正试图运行一个系统命令来提取焦油bz2文件到指定目录。代码如下:

    ProcessBuilder myProc = new ProcessBuilder("tar", "-xjf", "/path/to/MyTarFile.tar.bz2"); 
    myProc.directory(new File("/directory/i/want/results/in/"));
    myProc.start();
    System.out.println(myProc.command());
    

    它运行时不会出错,但是文件会被删除,不会在任何地方提取。

    任何帮助都将不胜感激。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Community CDub    8 年前

    我知道运行时.exec()有 a really nasty feature 如果您不手动地排空STDOUT/STDERR,它实际上看起来是挂起的。我希望ProcessBuilder能纠正这个缺陷,但是 this page

    请注意本技巧中的示例。如果子进程生成的输出足以使系统溢出,则示例可能会死锁。更健壮的解决方案需要在单独的线程中排出进程stdout和stderr。

        2
  •  3
  •   Paul Tomblin    15 年前

    更改 myProc.start();

      Process p = myProc.start();
      p.waitFor();
    

        3
  •  2
  •   Dave    15 年前

    运行此命令以查看错误。也许你的一条路是不正确的。

    import java.io.File;
    import java.io.InputStream;
    
    public class Untar {
    
    public static void main(String[] args) throws Exception {
        ProcessBuilder myProc = new ProcessBuilder("tar", "-xjf", "foo.tar.bz2");
        myProc.directory(new File("newdir"));
        Process p = myProc.start();
        InputStream is = p.getErrorStream();
        int c;
        while( (c = is.read()) != -1 ){
           System.out.print((char)c);
        }
        p.waitFor();
        System.out.println(myProc.command());
    }
    
    }
    
        4
  •  0
  •   Colin Hebert    15 年前

    刚试过这个密码。它起作用了。

    检查你的路线。