【发布时间】:2014-01-18 13:41:03
【问题描述】:
我有一个 Java 程序(在 Java 6 下运行),它监视一个目录,解析找到的文件的名称,然后根据元数据和文件内容运行操作(包括复制文件),具体取决于成功或失败进程,将文件移动到 OK 或 KO 目录。
我以简单用户的身份运行我的程序。 为了测试,我尝试将属于 root 的文件放在我的监视目录中。 此外,我给了他们 000 权限。
程序会找到文件但在文件副本上失败。 作为记录,实际复制是在这个模型上完成的:
FileOutputStream fos = new FileOutputstrem(DestFile)
FileInputStream stream = new FileInputStream(File);
byte buffer[] = new byte[bufferSize];
int nbRead;
while (-1 != (nbRead = fin.read(buffer)))
fos.write(buffer, 0, nbRead);
到目前为止,看到程序失败正是我所期望的,000 对未拥有文件的权限,无法读取。
但奇怪的是我的文件被移到了 KO 框。 移动完成了
File failedFileName = new File(KOdirectory, myFile.getName());
myFile.renameTo(failedFileName);
这应该有效吗? (假设他们是由 root 继承并具有 000 权限)?
它们最终位于 KO 目录中,仍由具有 000 权限的 root 拥有。
当我添加读取权限(所以我的文件是 444 root 拥有的)并将它们重新注入到受监视的文件夹中时,整个过程运行顺利并且文件最终在 OK 目录中(仍然是 root 拥有和 444 权限)。
如何移动只有读取权限的文件? 这种读取、移动、删除如何根据操作系统工作?在发行版上?
也许我应该补充一下,我在 Ubuntu 上运行它,它的笨拙的 root 用户(它存在,但不完全)的概念可能会搞砸这个。
【问题讨论】:
-
所以经过一番测试,我发现:如果它们位于您具有读/写权限的文件夹中,并且您将它们移动到您拥有的文件夹中,您可以移动 000 个文件读/写访问权限。
-
我会检查 Java 7 中没有修复这个问题。
标签: java ubuntu permissions