我正在使用以下代码更改文件权限:
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
问题是什么?
我正在使用以下代码更改文件权限:
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
问题是什么?
您提出的问题非常具体到您的系统和环境。
因此,我将通过指出您应该查看输出以确定发生了什么(或没有发生)来回答更广泛的问题 - 并教一个人钓鱼。
首先,您应该将Process
返回的实例分配exec
给一个变量。当它起作用时,即发即弃是很好的,但如果它不起作用,你将完全无法确定发生了什么。
第一站是调用process.waitFor()
- 等待进程完成,然后返回它的退出代码。如果这是非零,则它没有正确运行;并且根据过程,这甚至可以告诉您遇到了哪类错误。
如果这不足以解决您的问题,您需要查看输出到stdout
and的内容stderr
。process.getInputStream()
您可以通过分别调用和来获取读取这些流的句柄process.getErrorStream()
。一旦你有了这些流,只需像往常一样从它们中读取字节。
(请注意,您确实应该从这些流中读取,无论您是否打算处理数据。写入足够输出以填充缓冲区的进程可能会阻塞,直到“另一端”(您!)把它读下来。用你的chmod
例子虽然这不太可能是问题。)
现在您可以访问退出状态、stdout 和 stderr 流——事实上,如果您在控制台中运行该过程,您将获得的一切。现在剩下的就是使用该信息来解决您的特定问题......
这样做不是更简单吗:
File file = new File("/home/user/Desktop/file");
file.setReadable(true, true);
file.setWritable(true, true);
file.setExecutable(false, false);
这样你就可以避免进入系统特定的命令行调用......