加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何从Java控制台应用程序执行“less”执行分页?

发布时间:2020-12-15 02:31:15 所属栏目:Java 来源:网络整理
导读:我需要从我的 Java控制台应用程序执行less命令,使用分页.但是,我发现执行外部命令的唯一方法是Runtime.getRuntime().exec(),它要求我通过流写入/读取输入/输出.所以像cat这样的命令(而且实际上就像cat一样),但我需要分页功能. 在C中,我使用system().在Ruby中
我需要从我的 Java控制台应用程序执行less命令,使用分页.但是,我发现执行外部命令的唯一方法是Runtime.getRuntime().exec(),它要求我通过流写入/读取输入/输出.所以像cat这样的命令(而且实际上就像cat一样),但我需要分页功能.

在C中,我使用system().在Ruby中,Kernel.exec完成了这项工作.

有没有办法在Java中完成这项工作?

解决方法

使用Runtime.exec()执行外部进程时,其标准输入和输出流未连接到运行Java程序的终端.您可以使用shell重定向来连接它,但首先您需要知道要使用的终端.没有办法使用标准API找到终端,但你可能找到一个开源库.

为了看到它可以完成,这个程序打开了很少:

public class Test {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec(
                new String[] {"sh","-c","less Test.java < "+args[0] + " > "+args[0]});
        System.out.println("=> "+p.waitFor());
    }
}

要运行它,您应该使用java Test $(tty). tty程序打印连接到其标准输入的终端的名称.

我不太确定这个解决方案的可移植性;至少它适用于Linux.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读