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不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...
随机推荐
- Dijkstra最短路径算法[贪心]
Dijkstra算法的标记和结构与prim算法的用法十分相似.它们两者都会从余下顶点的优先队列中选择下一个顶点来构造一颗扩展树.但千万不要把它们混淆了.它们解决的是不同的问题,因此,所操作的优先级也是 ...
- string2array($value);
/*** 将字符串转换为数组** @param string $data 字符串* @return array 返回数组格式,如果,data为空,则返回空数组*/if ( !function_exis ...
- C语言结构体和联合体
1.单链表插入 #include <stdio.h> #include <stdlib.h> #define FALSE 0 #define TRUE 1 typedef st ...
- JMeter 学习笔记从不懂慢慢提升(01)
开源已经成为一个趋势,虽然说做测试是一个低端的行业,但是我们也应该在这个低端的行业慢慢提升自己,让自己到达理想的高度. 以前说如果你会使用loadrunner可能别人就会觉得你有一定的水平那么就会拿高 ...
- vs2010 调试C++程序 快捷键
命令名 快捷键 说明 调试.应用代码更改 Alt + F10 启动生成操作,利用它可以通过“编辑并继续”功能应用对正在调试的代码所作的更改. 调试.自动窗口 Ctrl + D,Ctrl + A 显示“ ...
- ASP.NET MVC and jqGrid 学习笔记 6-增删改操作
程序结构: Member.cs CRUD.cshtml CRUD.js HomeController 一.Model public class Member { [Key] public int No ...
- SSIS 学习(7):包配置(下)【转】
经过前面几个章节的学习,我们开发的ETL包算已经完成一大半了,但是还不够完美,正如一场足球比赛,前面大家打得很辛苦,传接得也很漂亮,但 是临门一脚的技术不过关,进不了球,一切都是白搭.今天我们就来为大 ...
- storyBoard中的Segue跳转
//———————————————--------------在不确定的Segue跳转----------------------------------- 多个按钮指向要跳转的视图 1.在一个恰 ...
- AngularJs学习经验汇集
>>关于ng-include 有时候你会发现你用这个指令想要加载某个模板总是加载不出来,url明明是对的,页面还是一片空白,这里有一个细节要注意以下: <div ng-include ...
- TensorFlow安装与测试
官网:http://tensorflow.org/安装步骤:1.sudo apt-get install python-pip python-dev python-virtualenv 2.virtu ...