我正在使用以下代码更改文件权限:
Runtime.getRuntime().exec("chmod 600 '/home/user/Desktop/file'");
但它没有效果!
代码执行前后ls -l /home/user/Desktop/file
报告:
-rw-rw-r-- 1 evir evir 7928 Jul 31 14:54 file
有什么问题?
答案 0 :(得分:5)
您提出的问题非常适合您的系统和环境。
所以我会回答更广泛的问题 - 并教导一个人钓鱼 - 指出你应该查看输出以确定发生了什么(或没有)。
首先,您应该将从Process
返回的exec
实例分配给变量。当它发挥作用时,“即发即忘”很好,但如果它不存在,那么你绝对无法确定发生了什么。
第一站是调用process.waitFor()
- 等待进程完成,并返回退出代码。如果这不是零则不能正常运行;根据过程,这甚至可以告诉你遇到了什么类型的错误。
如果这还不足以解决您的问题,您需要查看输出到stdout
和stderr
的内容。您可以通过分别调用process.getInputStream()
和process.getErrorStream()
来获取读取这些流的句柄。一旦你有这些流,只需正常读取它们的字节。
(请注意,您当然应该从这些流中读取,无论您是否打算处理数据。编写足够的输出以填充缓冲区的进程可能会阻塞直到“另一端”(您!)已经阅读了一些内容。使用chmod
示例虽然这不太可能是问题所在。)
现在您可以访问退出状态,stdout和stderr流 - 事实上,如果您在控制台中运行该过程,您将获得所有内容。现在剩下的就是利用这些信息来解决你的具体问题......
答案 1 :(得分:1)
这样做不会更简单:
File file = new File("/home/user/Desktop/file");
file.setReadable(true, true);
file.setWritable(true, true);
file.setExecutable(false, false);
这样就可以避免进入特定于系统的命令行调用...