1

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

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

问题是什么?

4

2 回答 2

5

您提出的问题非常具体到您的系统和环境。

因此,我将通过指出您应该查看输出以确定发生了什么(或没有发生)来回答更广泛的问题 - 并教一个人钓鱼。

首先,您应该将Process返回的实例分配exec给一个变量。当它起作用时,即发即弃是很好的,但如果它不起作用,你将完全无法确定发生了什么。

第一站是调用process.waitFor()- 等待进程完成,然后返回它的退出代码。如果这是非零,则它没有正确运行;并且根据过程,这甚至可以告诉您遇到了哪类错误。

如果这不足以解决您的问题,您需要查看输出到stdoutand的内容stderrprocess.getInputStream()您可以通过分别调用和来获取读取这些流的句柄process.getErrorStream()。一旦你有了这些流,只需像往常一样从它们中读取字节。

(请注意,您确实应该从这些流中读取,无论您是否打算处理数据。写入足够输出以填充缓冲区的进程可能会阻塞,直到“另一端”(您!)把它读下来。用你的chmod例子虽然这不太可能是问题。)


现在您可以访问退出状态、stdout 和 stderr 流——事实上,如果您在控制台中运行该过程,您将获得的一切。现在剩下的就是使用该信息来解决您的特定问题......

于 2012-07-31T10:43:49.807 回答
3

这样做不是更简单吗:

    File file = new File("/home/user/Desktop/file");
    file.setReadable(true, true);
    file.setWritable(true, true);
    file.setExecutable(false, false);

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

于 2012-07-31T21:04:08.503 回答