我遇到了麻烦。我试图通过linux服务器中的java代码强制使用bash命令创建一个文件夹。我的代码如下 -
String command = "/root/new_scripts/makedir.sh /webroot/Own";
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command);
return "true";
} catch (Exception ex) {
return ex.toString();
}
和makedir.sh文件包含
#!/bin/bash
mkdir $1
但它无法创建目录。
并且还尝试使用java代码创建一个目录如下 -
String s = null;
try {
Process p = Runtime.getRuntime().exec("mkdir /webroot/Own");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
// read the output from the command
System.out.println("\n\n\nHere is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
} catch (Exception ex) {
System.out.println("\n\n\nexception happened - here's what I know: ");
ex.printStackTrace();
}
但它给了我以下错误 -
以下是命令的标准输出:
以下是命令的标准错误(如果有):
mkdir:无法创建目录`/ webroot / Own':权限被拒绝
答案 0 :(得分:2)
答案 1 :(得分:1)
尝试更改项目目录权限:chmod +w /<your project directory>
然后使用mkdir
命令。
答案 2 :(得分:1)
用Java处理进程的输出并不是最简单的事情。如果仅用于debugginh,我会像这样修改makedir.sh
;
mkdir $2 > err.txt 2>err.txt
运行你的java代码然后检查err.txt-期望在那里找到像permission denied
这样的东西。对于生产代码,您希望您的Java应用程序了解makedir.sh
的失败。请查看this精彩文章,了解有关如何正确阅读流程'流的提示。