有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从java程序调用unix shell?从java程序向unix管道读写稳定的数据流

我有两个问题

1)如何从java调用unix shell。运行库来运行这样的命令

进程p=运行时。getRuntime()。执行(命令)

cat alias>;偏见

2)如何在unix管道中读取和写入来自java的稳定数据流。 我是否必须对管道进行所有系统调用,比如open read write

我基本上想复制这个命令

cat alias>;偏见

稳定的数据流将来自java程序,而不是cat alias


共 (2) 个答案

  1. # 1 楼答案

    自JDK7以来,有一种方便的方法可以做到这一点:

    ProcessBuilder pb = new ProcessBuilder("cat", "alias");
    File bias = new File("bias");
    pb.redirectOutput(Redirect.appendTo(bias));
    pb.start();
    

    参考:ProcessBuilder#redirectOutput

  2. # 2 楼答案

    可以像调用任何其他程序一样调用Unix shell。使用-c选项传递命令以作为参数运行。还要确保使用exec(String[])方法,而不是exec(String),以避免命令被错误地标记:

    String[] cmd = {"/bin/sh", "-c", "/bin/cat alias > bias"};
    Process p = Runtime.getRuntime().exec(cmd);
    

    要从/向进程读写,请从刚刚创建的Process实例获取输入、输出和错误流:

    InputStream in = p.getInputStream();
    InputStream err = p.getErrorStream();
    OutputStream out = p.getOutputStream();
    

    然后像往常一样读取/写入这些流

    请注意,流是相对于Java应用程序命名的。写入OutputStream的任何内容都将通过管道传输到您创建的流程的标准输入。进程写入stdout/stderr的任何内容都通过管道分别传输到从p.getInputStream()p.getErrorStream()获取的InputStream

    参考:http://download.oracle.com/javase/6/docs/api/java/lang/Process.html