java如何调用外部程序

news/2024/9/23 18:28:06

java如何调用外部程序

分类:

引言;有时候有些项目需求,直接使用Java编写比较麻烦,所有我们可能使用其他语言编写的程序来实现。那么我们如何在java中调用外部程序,幸好

java为我们提供了这样的功能。

一.调用外部程序接口

方法1.

Process p=Runtime.getRuntime.exec("cmd")(最常用)

方法2.

Process p=new ProcessBuilder(cmd).start()

但是一般方法一比较常用, 下面我们介绍下方法一中关于抽象Process类的常用函数

[java] view plain copy
  1. //向对应程序中输入数据  
  2. abstract public OutputStream getOutputStream();  
  3. //获得对应程序的输出流(没写错)  
  4. abstract public InputStream getInputStream();  
  5. //获得程序的错误提示  
  6. abstract public InputStream getErrorStream();  
  7. //等待程序执行完成,返回0正常,返回非0失败  
  8. abstract public int waitFor() throws InterruptedException;  
  9. //获得程序退出值,0正常退出,非0则异常  
  10. abstract public int exitValue();  
  11. //销毁进程  
  12. abstract public void destroy();  

其中前3个函数用的最多

二.代码实战

[java] view plain copy
  1. package test;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7. public class testProcess {  
  8. public static void main(String[]args) throws IOException, InterruptedException{  
  9.     Runtime r=Runtime.getRuntime();  
  10.     Process p=r.exec("python /home/cristo/桌面/test.py");  
  11.     InputStream is=p.getInputStream();  
  12.     InputStreamReader ir=new InputStreamReader(is);  
  13.     BufferedReader br=new BufferedReader(ir);  
  14.     String str=null;  
  15.     while((str=br.readLine())!=null){  
  16.         System.out.println(str);  
  17.     }  
  18.     //获取进程的返回值,为0正常,为2出现问题  
  19.     int ret=p.waitFor();  
  20.     int exit_v=p.exitValue();  
  21.     System.out.println("return value:"+ret);  
  22.    System.out.println("exit value:"+exit_v);  
  23.  }  
  24. }  

test.py中内容

[python] view plain copy
  1. for i in range(10):  
  2.     print("current i value:%s\n"%i)  


程序执行结果:

[java] view plain copy
    1. current i value:0  
    2. current i value:1  
    3. current i value:2  
    4. current i value:3  
    5. current i value:4  
    6. current i value:5  
    7. current i value:6  
    8. current i value:7  
    9. current i value:8  
    10. current i value:9  
    11. return value:0  
    12. exit value:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63862.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

高级程序语言设计课程第一次个人作业

这个作业属于的课程:https://edu.cnblogs.com/campus/fzu/2024C 作业要求:https://edu.cnblogs.com/campus/fzu/2024C 学号:102400213 姓名:范自亮 安装过程及成功画面:作业内容: 2.12.22.3问题:输出的语句连在一起未分行 解决方案:询问老师后自行修改 总结与思考:理论…

Javascript调试命令——你只会Console.log() ?

Javascript调试命令——你只会Console.log() ? https://segmentfault.com/a/1190000012957199 Console 对象提供对浏览器控制台的接入(如:Firefox 的 Web Console)。不同浏览器上它的工作方式是不一样的,但这里会介绍一些大都会提供的接口特性。Console对象可以在任何全局…

ES毛刺问题

es 毛刺问题 在写入时,边写边查并不会出现明显毛刺,但在写入时不查询,写入完成后再查询会出现明显毛刺。下图的三个毛刺是在是用反转索引时,写入完成后切换索引时出现。通过 remove 和 add 别名可以无感切换索引 /_aliases {"actions": [{"add": {&quo…

『模拟赛』CSP-S模拟3

『模拟赛记录』CSP-S模拟3因为正式集训所以不叫加赛了。Rank Upd:非常好 数据,掉分掉 Rank。 还行,其实是 Rank6,其实其实是 Rank4(丁真说正式比赛不会改数据。A. 奇观 简单题(?)。 赛时琢磨了一会想到了 \(Ans=C\cdot C\cdot F\),打出了 \(m=0\) 性质和 \(O(n^2)\) d…

Spark(七)Spark运行架构

运行架构Spark框架的核心是一个计算引擎,采用了标准master-slave的结构 如图展示了一个Spark执行时的基本结构,Driver表示master,负责管理整个集群中的作业任务调度,Executor是slave,负责实际执行任务核心组件 1. DriverSpark驱动器节点,用于执行Spark任务中的main方法,…

Go进阶01:golang context 上下文用法详解(比较好理解)

1 前言最近实现系统的分布式日志与事务管理时,在寻求所谓的全局唯一Goroutine ID无果之后,决定还是简单利用Context机制实现了基本的想法,不够高明,但是好用.于是对它当初的设计比较好奇,便有了此文.Context是golang官方定义的一个package,它定义了Context类型,里面包含了Deadl…

Kernel Stack栈溢出攻击及保护绕过

本文介绍Linux内核的栈溢出攻击,和内核一些保护的绕过手法,通过一道内核题及其变体从浅入深一步步走进kernel世界。前言 本文介绍Linux内核的栈溢出攻击,和内核一些保护的绕过手法,通过一道内核题及其变体从浅入深一步步走进kernel世界。 QWB_2018_core 题目分析 start.sh …