关于Java中使用外部的程序的方法(待完善)

一个程序,单单使用自己的方法是不行的,你还需要引用外部的程序,这样才能完善你的程序。当然这要根据的你项目来说,现在我需要使用外部的程序,所以我就需要制作一个连接到外部的程序。所以我翻查了一下,发现可以通过java.lang中的runTime的类中的exec的函数。其中的参数是命令参数,其数据类型是String的数据类型。但是当你引用一个外部的程序的时候,你会发现执行过程不可见的,所以当你在调用外部程序处理数据的时候,你都不知道这个程序到底有没有执行。所一个还要调用一下process的方法,并且exec的返回值就是process的类型。但是process的怎么输出呢,还需要创建一些其他的方法。所以还要创建一些其他的方法。关于就是调用外部方法显示一下程序的进程,自己不是很清楚,所以现附上代码,然后有新的理解在进行修改。

package com.hello.runTime;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;

public class runTime {
    public static final int success=0;//当success=0的时候就是程序成功的意思
    public static final String exec="I:\\krpano\\krpanotools64\\kmakemultires makepano -config=\\templates\\vtour-multires.config i:\\krpano\\picture\\*.jpg";//创建一个命令执行的字符串
    public static final String success_massage="程序执行成功";//程序最后运行完成功的时候返回的信息
    public static final String success_error="程序执行的失败";//程序最后运行完失败的时候返回的信息
    public static void main(String[] args)throws Exception {    
        try {

            Process process=Runtime.getRuntime().exec(exec);//运行exec执行程序,在使用exec的时候先要使用getRuntime才行,通过Runtime是无法直接调用exec方法的
            readProcessOutput(process);//调用自定义的方法获取到process的值并转化为String类型,在程序运行的时候不断的显示出来。
            int exitCode=process.waitFor();调用waitFor的方法,等待程序完成的时候获取到waitFor的值,waitFor的值是一个整型数据,0代表成功,非0代表失败。
            if(exitCode==success){
                System.out.println(success_massage);根据从waitFor获取的值,判断是该显示成功还是失败。
            }else{
                System.out.println(success_error);
            }
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
    public static void readProcessOutput(final Process process)
    {
        read(process.getInputStream(),System.out);调用自定义方法read的方法。其中的参数是一个输入流数据,和打印的数据
        read(process.getErrorStream(),System.err);

    }
    public static void read(InputStream inputStream,PrintStream out)
    {
        BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));先将process获取到的输入流放在一个BufferedReader中
        String line;
        try {
            while((line=reader.readLine())!=null){然后将bufferedRead转化为字符串的形式,readLine的返回值就是字符串的形式
                out.println(line);如果这个字符串不存在的话,就将他输出。
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

可以程序看出,写了了两个方法,获取process的进程是调用的是readProcessOutput这个方法,参数是process的类型,内部则是继续调用read的方法,参数有两个,一个是inputStream输入流,第二个是printStream打印流,输入流就是获取的process的输入流方法。getInputStream(),打印流就是是一个成功的打印,获取proces.getInputStream的值要使用BufferedReader,再将它他转化为可以输出的字符串的形式。调用的BufferedReader的getline(),这样就可以知道他们的字符串的值了。最后在关闭输入流就行了

你可能感兴趣的:(java-web,java)