chmod在java中的exec中不起作用

时间:2012-07-31 10:31:34

标签: java linux exec file-permissions chmod

我正在使用以下代码更改文件权限:

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

有什么问题?

2 个答案:

答案 0 :(得分:5)

您提出的问题非常适合您的系统和环境。

所以我会回答更广泛的问题 - 并教导一个人钓鱼 - 指出你应该查看输出以确定发生了什么(或没有)。

首先,您应该将从Process返回的exec实例分配给变量。当它发挥作用时,“即发即忘”很好,但如果它不存在,那么你绝对无法确定发生了什么。

第一站是调用process.waitFor() - 等待进程完成,并返回退出代码。如果这不是零则不能正常运行;根据过程,这甚至可以告诉你遇到了什么类型的错误。

如果这还不足以解决您的问题,您需要查看输出到stdoutstderr的内容。您可以通过分别调用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);

这样就可以避免进入特定于系统的命令行调用...