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-金鸡独立的支持!