今天在工作中突然遇到一种情况:在程序代码中直接写死调用Linux命令,用于操作服务器上的文件,忽然不知道怎么操作,于是就上网学习,最后总结了两种方法,现记录一下:
可以通过使用Java中的Runtime
类或ProcessBuilder
类来实现:
1、使用Runtime
类
@RestController
public class MyController {
@GetMapping("/execCommand")
public String execCommand() {
String command = "ls -l /tmp"; // 要执行的Linux命令
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(System.getProperty("line.separator"));
}
return stringBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
return "Error";
}
}
}
2、使用ProcessBuilder
类
@RestController
public class MyController {
@GetMapping("/execCommand")
public String execCommand() {
String command = "ls -l /tmp"; // 要执行的Linux命令
try {
ProcessBuilder processBuilder = new ProcessBuilder(command.split(" "));
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(System.getProperty("line.separator"));
}
return stringBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
return "Error";
}
}
}
需要注意的是,在生产环境中执行Linux命令需要谨慎,建议仅在必要的情况下使用。同时,需要注意命令执行的安全性和输入参数的合法性
以上就是今天对springboot程序中调用方法执行linux命令的学习总结了