Java执行Linux命令
主要使用到两个类Runtime和Process//获取Runtime实例Runtime rt = Runtime.getRuntime();//command是字符串类型,为需要执行的linux命令Process p = rt.exec(command);// 查看硬盘空间//初始化缓冲阅读器BufferedReader in = null;//获取命令所得的缓冲流结果in = new Buffe
·
最近写代码需要执行linux命令,对这块比较陌生,在摸索了网上资料以及项目里的前辈写的代码后,整理了一下快速上手的过程。(最新补充在最后)
主要使用到两个类Runtime和Process
//获取Runtime实例
Runtime rt = Runtime.getRuntime();
//command是字符串类型,为需要执行的linux命令
Process p = rt.exec(command);// 查看硬盘空间
//初始化缓冲阅读器
BufferedReader in = null;
//获取命令所得的缓冲流结果
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
//此时就可以对获取的结果in进行操作了,可以使用in.readline()逐步获取每一行的结果内容
举例一:
现在想要获取磁盘的空间使用情况,用到的命令是:df -h
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("df -h");
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
//逐一对每行内容进行操作
while ((str = in.readLine()) != null) {
……
……
}
} catch (Exception e) {
logger.info("there has an eror: ", e);
} finally {
in.close();
}
举例二:
假如需要执行的命令里带有参数、管道等需要分隔成字符串数组进行执行
现在想要获取"/test"目录下的使用磁盘大小,需要使用到的命令:df -h|grep /test
Runtime rt = Runtime.getRuntime();
//分割成数组
String[] commands = {"/bin/sh","-c","df -hlT|grep \"/test\"};
Process p = rt.exec(commands);
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
……
……
}
} catch (Exception e) {
logger.info("there has an eror: ", e);
} finally {
in.close();
}
举例三:
假如需要执行的命令有两个,用&&连接,比如要先进入/opt/dmdbms/bin目录下执行dexp命令
需要使用到的命令是cd /opt/dmdbms/bin && ./dexp,直接以字符串形式传入exec()就行。
举例四:
最近又使用到了相关操作,通过以上两种方式,执行ffmpeg命令时,服务器上能执行成功的命令,用java执行老是报错什么no such file,网上搜了挺久也debug了挺久,最后直接使用ProcessBuilder发现就完全没问题了,推荐用以下方式执行命令
try {
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process process = processBuilder.start();
StringBuilder errorOutput = new StringBuilder();
try (BufferedReader errorIn = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
String str;
//错误输出
while ((str = errorIn.readLine()) != null) {
errorOutput.append(str).append("\n");
}
}
int exitCode = process.waitFor();
// 检查命令执行结果
if (exitCode == 0) {
log.info("command executed successfully.");
return false;
}
log.error("execute command '{}' failed, exit code: {}, error out : {}", command, exitCode, errorOutput);
} catch (Exception e) {
log.error("execute command '{}' error!", command, e);
}
更多推荐

所有评论(0)