Java:Runtime.exec() Runtime.getRuntime().exec(),哪个才是在Java中调用Linux指令的方式呢?
展开全部
/**
* cmd 脚本执行方法<br>
* 该方法不执行任何逻辑.<br>
* 就是判断操作系统,返回执行结果是否成功.
*
* @param invoke执行的shell脚本命令
*/
public static String cmdControler2(String invoke) {
System.out.println(invoke);
if (invoke == null)
return null;
// 获取操作系统的名称 如:"Windows 7" or "Linux"
String osName = System.getProperties().getProperty("os.name");
String[] cmd_arr = new String[] { "/bin/sh", "-c", invoke };
// // 根据操作系统生成shell脚本
if (osName.contains("Windows"))
cmd_arr = new String[] { "cmd", "/c", invoke };
Process process = null;
BufferedReader result = null, error = null;
try {
process = new ProcessBuilder(cmd_arr).start();
// 功能是一样的
// Process process = Runtime.getRuntime().exec(cmd_arr);
String str = "";
result = new BufferedReader(new InputStreamReader(
process.getInputStream()));
error = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
while ((str = result.readLine()) != null) {
// 成功提示
// 此处的成功提示不需要显示
// System.out.println(str);
return str;
}
while ((str = error.readLine()) != null) {
// 存在错误提示
System.out.println(str);
return ERRORSTR + str;
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
// 关闭流
if (result != null) {
try {
result.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (error != null) {
try {
error.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 释放process
if (process != null)
process.destroy();
}
// 前面的都没有执行就说明没有成功
return "";
}
Process process = new ProcessBuilder(cmd_arr).start();
// 功能是一样的
// Process process = Runtime.getRuntime().exec(cmd_arr);
这两个是一样的效果。
上面的方法是我写的。直接改改就行。抽象成工具类就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询