如何从Java程序运行nano?

时间:2018-12-02 15:07:29

标签: java nano

我正在用Java(https://gitlab.com/gitlabcyclist/secondmemory)编写命令行程序,并且我希望能够运行nano,以便用户可以在程序中编辑问题。我尝试像这样使用ProcessBuilder

new ProcessBuilder("nano", "myfile").inheritIO().start();

但这不起作用。显示了nano,但是我无法编辑该文件。

请明确说明:我想打开nano,以便用户可以编辑临时文件。我正在寻找一种使用C或Ruby进行系统调用之类的方法。

很抱歉,这个问题已经有了答案。谷歌搜索没有任何帮助,因为所有结果都与使用nano编辑Java文件有关。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

因为您需要捕获命令并且必须直接执行该过程。想象一下,您在没有键盘的计算机上启动了一个进程。您需要编写向纳米外壳发送命令的代码。

您可以查看此线程以查看how to interact with ProcessBuilder。这是复制粘贴的示例代码,只需单击链接以获取更多详细信息:

public class TestMain {
    public static void main(String a[]) throws InterruptedException {

        List<String> commands = new ArrayList<String>();
        commands.add("telnet");
        commands.add("www.google.com");
        commands.add("80");
        ProcessBuilder pb = new ProcessBuilder(commands);
        pb.redirectErrorStream(true);
        try {

            Process prs = pb.start();
            Thread inThread = new Thread(new In(prs.getInputStream()));
            inThread.start();
            Thread.sleep(2000);
            OutputStream writeTo = prs.getOutputStream();
            writeTo.write("oops\n".getBytes());
            writeTo.flush();
            writeTo.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class In implements Runnable {
    private InputStream is;

    public In(InputStream is) {
        this.is = is;
    }

    @Override
    public void run() {
        byte[] b = new byte[1024];
        int size = 0;
        try {
            while ((size = is.read(b)) != -1) {
                System.err.println(new String(b));
            }
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}