Java调用外部程序常用算法和封装类
一个项目不可能只使用一种编程语言来开发,也不可能由一个人开发,所以,Java程序员要学会和使用其他编程语言的程序员合作。那么,让我来发布一个工具类——Java外接程序扩展包,并将相应算法发布。Java外接程是指用Java调用其他编程语言编写的算法核心Console(命令行)程序并进行交互,为了使得外接变得简便,我编写了这个封装类,方便大家的使用。
首先,我来介绍这个外接程序的算法——我管这种算法叫做“3进程-3流算法”。3进程指的是:1、主/目标标准输入进程;2、目标标准输出监听进程;3、目标标准错误输出监听进程。3流指的是:1、目标输入流;2、目标输出流;3、目标错误输出流。我来分别解释一下,目标输入流指的是Java程序向外接程序的控制台内输入信息的流,也就好比你就是Java程序,你启动cmd,向里边输入“ping”命令,这就是Java程序与目标程序建立的第一个流。目标输出流指的是目标程序向Java程序输出(或叫做打印)信息,也就好比cmd是目标程序,你是Java程序,你输入“ping”命令之后,cmd给你了回应,因为你没有使用参数,所以ping认为你不知道如何使用它,然后向你做出了标准输出,告诉你如何使用它。然后,目标错误输出流指的是目标程序向Java程序输出了错误信息,就好比你是Java程序,你向cmd程序输入了“abcdefg”,然后cmd认为你输入了错误的指令,所以启动错误流,向你报告你输入错误的信息了。而后两个进程就是为了随时监听标准输出和标准错误输出流的。
下面,让我们来看看如何实现这些功能,首先,先来看看如何实现执行启动外接程序的字符串:
public class a{
public static main(String args[]){
Runtime runtiem=Runtime.getRuntime();
Process process;
process=runtime.exec(command);
}
}
非常简单对吗,在网上的,这句exec只要你一搜索,就会看到被疯传的这句代码。然后,我们来看看如何检测错误信息:
public class ErrorStream extends Thread{ /**
* 从主类中得来的process对象,用于获取流
*/
public Process process;
/**
* 同步文本,随时与目标程序标准错误控制台同步
*/
public String err=""; @Override
/**
* 线程启动
*
*/
public void run() {
BufferedReader br=new BufferedReader(new InputStreamReader(process.getErrorStream()));
try {
printer(br);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 更新标准错误信息
*
* @param br 使用BufferedReader类型提供的标准错误流
* @throws IOException 当读取产生错误时
*/
public void printer(BufferedReader br) throws IOException{
String temp;
while((temp=br.readLine())!=null){
err=err+temp;
}
} /**
* 继承Thread类的构造方法,用于创建线程
*
*/
public ErrorStream() {
super();
// TODO 自动生成的构造函数存根
} /**
* 继承Thread类的构造方法,用于创建线程并给与名称
*
*/
public ErrorStream(String name) {
super(name);
// TODO 自动生成的构造函数存根
} }
这段代码,是我封装的3个类里边的其中一个:ErrorStream,用来检测错误信息。其他的代码我就不在此列举,我的封装源码也提供给了大家,大家下载查看就行了!
还有一点:我的封装中所有字段、方法和类全部设置成public,但是有很多你不知道或无法理解的类请不要进行操作,以便防止错误。然后我再说一下,本封装中的唯一一个static方法——ExternalProgramUtil.pexe这个方法是封装了直接使用Runtime进行操作的exec指令,只不过为了让大家省点代码,所以不进行初始化操作,任何字段都不会初始化,使用时请注意!
下面,到了我们的重头戏——ExternalProgramUtil!我将提供360和百度两种网盘的下载服务:
360:http://yunpan.cn/Qp8T6QxPWTJSe
百度:http://pan.baidu.com/s/1ntlsSit
如果失效或者使用时有问题就来找我吧,邮箱:zhangyutong@zhangyutong.net ,QQ:2276768747 。
另外说一下:由于获取网盘链接和日志无法同步,所以jar包中的本地日志文件无法填写下载链接,敬请原谅!
欢迎大家下载使用!感谢大家对BKMMSC-金鸡独立的支持!
Java调用外部程序常用算法和封装类的更多相关文章
- [转]java调用外部程序Runtime.getRuntime().exec
Runtime.getRuntime().exec()方法主要用于执行外部的程序或命令. Runtime.getRuntime().exec共有六个重载方法: public Process exec( ...
- JAVA中调用外部程序,并等待其退出(涉及Runtime和ProcessBuilder)
这段时间要写一个java调用外部程序的功能,踩了几个坑,这里分享一下. 首先用的是RunTime,调用代码如下: Process pro = Runtime.getRuntime().exec(&qu ...
- java 调用windows bat脚本
当我们需要在java程序中调用外部程序,我们可用通过Runtime.exec()调用来完成. The class java.lang.Runtime features a static method ...
- 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数
1)掌握jQuery常用AJAX-API 2)掌握Java调用MySQL / Oracle过程与函数 一)jQuery常用AJAX-API 目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取 ...
- Java调用Javascript、Python算法总结
最近项目中经常需要将Javascript或者Python中的算法发布为服务,而发布Tomcat服务则需要在Java中调用这些算法,因此就不免要进行跨语言调用,即在Java程序中调用这些算法. 不管是调 ...
- [转]Java调用Javascript、Python算法总结
最近项目中经常需要将Javascript或者Python中的算法发布为服务,而发布Tomcat服务则需要在Java中调用这些算法,因此就不免要进行跨语言调用,即在Java程序中调用这些算法. 不管是调 ...
- 【Java】-NO.13.Algorithm.1.Java Algorithm.1.001-【Java 常用算法手册 】-
1.0.0 Summary Tittle:[Java]-NO.13.Algorithm.1.Java Algorithm.1.001-[Java 常用算法手册 ]- Style:Java Series ...
- 常用算法之排序(Java)
一.常用算法(Java实现) 1.选择排序(初级算法) 原理:有N个数据则外循环就遍历N次并进行N次交换.内循环实现将外循环当前的索引i元素与索引大于i的所有元素进行比较找到最小元素索引,然后外循环进 ...
- Java魔法堂:调用外部程序
前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...
随机推荐
- thinkphp分配数组
TestAction.class.php 的edit方法中 $this->assign('list',array('one'=>'a','two'=>'b')); 后,在edit.h ...
- Maven 修改本地存储库位置--转
step1:默认会放在~/.m2/repository目录下 (“~”代表用户的目录,比如windows下一般都是C:\Documents and Settings\[你的用户名]\), step2: ...
- wxPython tools img2py
最近在学习wxPython时,发现img2py工具只能处理单个图标,就自己写了一个简单的小工具,把文件夹下所有的图标文件转化到py文件里, 话不多说,直接上代码: # -*- coding: utf- ...
- TCP/IP与UDP区别
最近面试,问到这方面的问题,这里总结一下: TCP (Transmission Control Protocol 传输控制协议):面向连接的,不可靠的,数据流服务.UDP (User Dat ...
- Windows Embedded CE 6.0开发环境的搭建
最近开始在学习嵌入式,在这里首先得安装Windows Embedded CE 6.0,其中遇到了很多问题,电脑的系统以及相关配置都会在安装过程中受到影响,因此笔者就安装中的问题以及环境搭建来介绍一下. ...
- Centos搭建nginx环境,编译,添加服务,开机启动。
首先安装所需的安装库,yum -y install gcc gcc-c++ autoconf libtool* openssl openssl-devel 编译的时候,若有提示错误,提示缺少某个库,y ...
- 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
一.先看下相关国外的专业数据对四大协议的比较: Protocol CoAP XMP ...
- arguments的用法
arguments 对象 在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们. 例如,在函数 sayHi() 中,第一个参数是 message.用 argument ...
- <转>cookie和缓存解析
原文来自:http://www.cnblogs.com/cuihongyu3503319/archive/2008/04/18/1160083.html 缓存cache 为了提高访问网页的速度,浏览器 ...
- Web.config配置详解【转 】
一.认识Web.config文件 Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web ...