返回顶部
首页 > 资讯 > 精选 >怎么正确调用java.lang.Runtime.exec
  • 862
分享到

怎么正确调用java.lang.Runtime.exec

2023-06-25 12:06:58 862人浏览 独家记忆
摘要

这篇文章主要介绍“怎么正确调用java.lang.Runtime.exec”,在日常操作中,相信很多人在怎么正确调用java.lang.Runtime.exec问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎

这篇文章主要介绍“怎么正确调用java.lang.Runtime.exec”,在日常操作中,相信很多人在怎么正确调用java.lang.Runtime.exec问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么正确调用java.lang.Runtime.exec”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

调用java.lang.Runtime.exec的正确姿势

今天写一个用到编译的程序,遇到了问题。

在调用

runtime.exec("javac HelloWorld.java");

运行完美,也就是有生成.class。

而到了

runtime.exec("java HelloWorld >> output.txt");

却怎么也无法重定向输出,连output.txt文件也生成不了。

测试"echo hello >> 1.txt" 也是不可以,甚是头疼,于是乎翻阅资料,这才发现了

一个认识上的误区,就是exec(str)中 不能把str完全看作命令行执行的command。尤其是str中不可包含重定向 ' < ' ' > ' 和管道符' | ' 。

那么,遇到这样的指令怎么办呢?我们接着往下看:

两种方法

一种是将指令写到脚本中,在runtime.exec()中调用脚本。这种方法避过了使用exec(),也是一种思路。

还有一种方法,就是调用exec()的重载方法:我们来重点看这种方法:

我们先看一下官方doc[>link<]给我们提供的重载方法:

public Process exec(String command) throws ioExecptionpublic Process exec(String command,String [] envp) throws IOExecptionpublic Process exec(String command,String [] envp,File dir) throws IOExecptionpublic Process exec(String[] cmdarray) throws IOExecptionpublic Process exec(String[] cmdarray,String [] envp) throws IOExecptionpublic Process exec(String[] cmdarray,String [] envp,File dir) throws IOExecption

翻阅其文档,发现其重载方法4.exec(String []cmdarray) 最简便适合我们,官方说4.exec() 与执行6.exec(cmdarray,null,null) 效果是一样的。那么5.exec.(cmdarray,null)也是一样的咯?

于是乎,我们可以这样写:

runtime.exec( new String[]{"/bin/bash", "-c", "java HelloWorld >> output.txt"} );runtime.exec( new String[]{"/bin/bash", "-c", "java HelloWorld >> output.txt"} ,null );runtime.exec( new String[]{"/bin/bash", "-c", "java HelloWorld >> output.txt"} ,null,null );

不过要注意,如果使用java /home/path/HelloWorld 时,' / '会被解析成 " . ",从而报出 “错误: 找不到或无法加载主类 .home.path.HelloWorld ”.

所以,无法使用全路径的时候,我们需要更改一下策略,把 路径 改到工作目录dir 中去,比如:

File dir = new File("/home/path/");

然后用其第6种重载方法,把dir作为第三个参数传入即可:

String []cmdarry ={"/bin/bash", "-c", "java HelloWorld >> output.txt"}runtime.exec(cmdarry,null.dir);

当然echo , ls 等命令便不受' / '限制了。

*BTW,exec()取得返回值的标准用法详见:runtime.exec()的左膀右臂

小结一下

当命令中包含重定向 ' < ' ' > ' 和管道符' | ' 时,exec(String command)方法便不适用了,需要使用exec(String [] cmdArray) 或者exec(String []cmdarray,String []envp,File dir)来执行。

例如:

exec("echo hello >> ouput.txt");exec("history | grep -i mvn");

应改为:

exec( new String[]{"/bin/sh","-c","echo hello >> ouput.txt"});exec( new String[]{"/bin/bash","-c","history | grep -i mvn"},null);

Java Runtime.exec()注意事项

  • Runtime.exec()用来执行外部程序或命令

1.Runtime.exec() 有四种调用方法

* public Process exec(String command);    * public Process exec(String [] cmdArray);    * public Process exec(String command, String [] envp);    * public Process exec(String [] cmdArray, String [] envp);

2.得到程序执行返回值, 0为success

需要用waitFor()函数,比如

Process p = Runtime.getRuntime().exec("javac");(处理.....)int exitVal = p.waitFor();

3.得到程序执行的结果或错误信息

需要用BufferedInputStream 和 BufferReader来得到,否则程序会hang

比如得到错误信息用p.getErrorStream(),然后输出即可:

BufferedInputStream in = new BufferedInputStream(p.getErrorStream());BufferedReader br = new BufferedReader(new InputStreamReader(in));

4.Runtime.exec()

不等同于直接执行command line命令

啊,我算是在这里吃了苦头了。Runtime.exec()很有局限性,对有些命令不能直接把command line里的内容当作String参数传给exec().

比如重定向等命令。举个例子:

javap -l xxx > output.txt

这时要用到exec的第二种重载,即input 参数为String[]:

Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c","javap -l xxx > output.txt"});

到此,关于“怎么正确调用java.lang.Runtime.exec”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么正确调用java.lang.Runtime.exec

本文链接: https://lsjlt.com/news/304728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么正确调用java.lang.Runtime.exec
    这篇文章主要介绍“怎么正确调用java.lang.Runtime.exec”,在日常操作中,相信很多人在怎么正确调用java.lang.Runtime.exec问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎...
    99+
    2023-06-25
  • 调用java.lang.Runtime.exec的正确姿势分享
    目录调用java.lang.Runtime.exec的正确姿势两种方法小结一下Java Runtime.exec()注意事项1.Runtime.exec() 有四种调用方法2.得到程...
    99+
    2024-04-02
  • 怎么正确进行Python调用
    这篇文章主要讲解了“怎么正确进行Python调用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么正确进行Python调用”吧!python语言具有非常简捷而清晰的语法特点,适合完成各种高层...
    99+
    2023-06-17
  • vue怎么正确使用create,mounted调用方法
    这篇文章主要介绍了vue怎么正确使用create,mounted调用方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue怎么正确使用create,mounted调用方法文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-30
  • 怎么正确使用Oracle Hint
    本篇内容主要讲解“怎么正确使用Oracle Hint”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么正确使用Oracle Hint”吧!一、提示(Hint)概...
    99+
    2024-04-02
  • 怎么正确使用mysql dump
    本篇内容主要讲解“怎么正确使用mysql dump”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么正确使用mysql dump”吧!1、如果mysql dum...
    99+
    2024-04-02
  • python怎么正确使用yield
    这篇文章主要介绍了python怎么正确使用yield,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。生成器如果在一个方法内,包含了 yield 关键字,那么这个函数就是一个「生...
    99+
    2023-06-15
  • 实现正确实现Python调用jar包
    博主最近在做python的项目,需要调用jar包,但是虽然参考了网上很多的教程,但是有一点是无法解决,那就是用python无法启动jvm虚拟机!!!这是所有工作的前提,重装了好多次也没有解决,最后请教大佬解决了。 问题的关键点在于:电脑的...
    99+
    2023-01-31
    正确 Python jar
  • 小程序该怎样正确调用后端接口
    这篇文章主要介绍小程序该怎样正确调用后端接口,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、官方方法此方法简单易懂,但是在使用时代码量过大,我建议还是封装一下比较好用。wx.request({  ...
    99+
    2023-06-06
  • 电脑时间一直都不正确怎么调整
    这篇文章主要讲解了“电脑时间一直都不正确怎么调整”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“电脑时间一直都不正确怎么调整”吧!在搜索框中输入控制面板,随后打开对应选项。在打开的控制面板界面...
    99+
    2023-06-27
  • 怎么正确使用dotnet-*工具
    本篇内容主要讲解“怎么正确使用dotnet-*工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么正确使用dotnet-*工具”吧!安装因为我们现在都是容器化时代了,所以我们可以把这类工具全部...
    99+
    2023-06-22
  • 怎么正确使用sed命令
    本篇内容介绍了“怎么正确使用sed命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!sed是一种在线编辑器,它一次处理一行内容。处理时,把当...
    99+
    2023-06-28
  • Git工具怎么正确使用
    这篇文章主要介绍“Git工具怎么正确使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Git工具怎么正确使用”文章能帮助大家解决问题。一、安装Git二、Git简介Git是一种多人协作的版本管理系统。...
    99+
    2023-06-29
  • 怎么正确使用dotnet工具
    要正确使用dotnet工具,首先需要安装dotnet SDK。然后,可以使用以下步骤进行操作:1. 打开命令提示符或终端窗口。2. ...
    99+
    2023-08-18
    dotnet
  • asp中response.flush怎么正确使用
    在ASP中,Response.Flush方法用于将所有尚未发送到客户端的输出发送到客户端。这可以用于实时地将输出发送到客户端,而不是...
    99+
    2023-08-19
    asp
  • stream中怎么正确使用peek
    这篇文章主要讲解了“stream中怎么正确使用peek”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“stream中怎么正确使用peek”吧!简介自从JDK中引入了stream之后,仿佛一切都...
    99+
    2023-07-05
  • module.exports和exports怎么正确使用
    这篇文章主要讲解了“module.exports和exports怎么正确使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“module.exports和exports怎么正确使用”吧!mod...
    99+
    2023-07-05
  • C++中怎么正确使用hashmap
    这篇“C++中怎么正确使用hashmap”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中怎么正确使用hashmap”文...
    99+
    2023-07-05
  • java中println怎么正确使用
    在Java中,`println`是一个用于输出的方法,用于在控制台中打印一行文本。它的正确使用方式如下: 打印字符串: Syst...
    99+
    2023-10-28
    java
  • oracle索引怎么正确使用
    正确使用Oracle索引的基本原则如下: 选择适当的列进行索引:选择经常用于查询和连接的列进行索引,特别是那些具有高选择性和频繁...
    99+
    2024-04-09
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作