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不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...
随机推荐
- gcc中不同namespace中同名class冲突时
正常情况下,编译器都会报错,提示你有两个候选类,让你明确的选择一个. 比如我的情况,我自己设计了一个类Message, 然后在某个文件里面引用了它.但是我的文件中又引入了mongodb的头文件,非常不 ...
- leetcode -- Merge k Sorted Lists add code
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. [ ...
- ROC和AUC介绍以及如何计算AUC
原文:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ 为什么使用ROC曲线 既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因 ...
- Opacity多浏览器透明度兼容处理(转)
用来设定元素透明度的 Opacity 是CSS 3里的一个属性.当然现在还只有少部分浏览器支持. 不过各个浏览器都有自己的私有属性来支持,其中包括老版本的Mozilla和Safari: IE: fil ...
- 搭建属于自己的wiki
1.开源wiki mediawiki http://www.mediawiki.org/wiki/MediaWiki 2. 开发文档 http://www.mediawiki.org/wiki/Man ...
- 计算 MD5值
// // MD5Value.h // iOSEdu // // Created by littest on 16/2/26. // Copyright © 2016年 littest. All ri ...
- Java 8 Stream API Example Tutorial
Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...
- python(1) - 条件判断和循环
条件判断: 比如输入用户年龄,根据年龄打印不同的内容,在python中用if语句实现: age = 20 if age >= 18: print('你可以看这个视频!') 可以给if加一个els ...
- Clover:让Windows下的资源管理器具有Chrome一样的标签页
这个小巧实用的插件第一次激发了我给人捐款的冲动. 不多说,上图看效果: 具有和Chrome一样的书签功能,以网页的形式保存本地位置,将常用目录放在书签上十分方便. 多标签相比多窗口的优势不需要我多说, ...
- 关于TreeSet倒序排列和自定义排列
本文部分转自:http://blog.csdn.net/kaituozhe345/article/details/6842945 1.TreeSet的自然排序. TreeSet存储对象的时候, 可以排 ...