您的位置:首页 > 运维架构 > Shell

java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值

2017-06-23 15:09 971 查看
原文:http://blog.csdn.net/ligaoyang/article/details/6755327

测试能拿返回值,但是在getErrorStream里,

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;


public class Test {

/**

* @param args

*/

public static void main(String[] args) {

   String name1 = "C:/WINDOWS/system32/winmine.exe";

   String name2 = "C:/test.cmd";//我CMD里面的内容是 netstat -ano 其他的也可以

   String name3 = "java -version";

   try {

    System.out.println(execCMD(name1, 3));

    System.out.println(execCMD(name2, 2));

    System.out.println(execCMD(name3, 1));

   } catch (IOException e) {

    e.printStackTrace();

   }

}

/**



* @param path 要执行的文件路径或命令

* @param type 执行类型 1 shell命令 2 .CMD文件 3 .EXE文件

* @return 返回的值

* @throws IOException

*/

public static String execCMD(String path, int type) throws IOException {

   final String COM_TITLE = "CMD /C ";

   if (type == 1) {

    path = COM_TITLE + path;

   }

  
Process pro = Runtime.getRuntime().exec(path);//"cmd.exe /C R");// CMD Rserve");// --RS-enable-remote");
try {
pro.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
br = new BufferedReader(new InputStreamReader(pro.getInputStream(), Charset.forName("GBK")));

String line = null;
StringBuffer text = new StringBuffer("获得的信息是: \n");
while ((line = br.readLine()) != null) {
text.append(line);
System.out.println(line);
}

BufferedReader ber = null;
ber = new BufferedReader(new InputStreamReader(pro.getErrorStream(), Charset.forName("GBK")));

String linee = null;
StringBuffer texte = new StringBuffer("获得错误的信息是: \n");
while ((linee = ber.readLine()) != null) {
texte.append(linee);
}


   return text.length() > 9 ? text.toString() : text1.toString();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: