如何使用Java代码将图像权限模式更改为777?

时间:2009-06-12 14:10:24

标签: java nio

我想使用Java代码将权限模式值“777”赋予映像文件。我怎样才能使用Java?因为我无法使用默认权限模式“664”删除图像。

5 个答案:

答案 0 :(得分:8)

您可以使用'exec'方法运行外部命令来执行chmod。

Runtime.getRuntime().exec( "chmod 777 myfile" );

答案 1 :(得分:8)

您可以创建与该文件关联的File对象,然后使用setExecutablesetReadablesetWritable更改权限。当然,如果您的程序无权更改文件的访问权限,这些操作将失败。

答案 2 :(得分:3)

它是NIO包的一部分。您可以通过java.nio.file.attribute.PosixFilePermission完成此操作。

这只是在Java 1.7,但现在已经有known issue了。

答案 3 :(得分:1)

不幸的是,Java几乎没有抓住系统文件属性,因为它会破坏java的黄金法则“一次编写,随处运行”。

确实当你写下你想要对该文件进行777访问时,这显然意味着你处于unix之下。但是这样的请求在Windows下意味着什么呢?

因此,解决特定的操作系统主题应该不会让您感到意外,您必须使用特定的功能。这是使用声称(有充分理由)是“独立于平台”的语言时要付出的代价

更安全的方法是使用一个实现您想要的JNI库。 一个简单但又脏又危险的方法是使用Runtime.getRuntime()。exec(“chmod 777 myFile”)。

为何危险?事实上,当一个人叫这样的执行官(“blahblah”)时会发生什么?

运行java程序forks的unix进程; “重复”进程然后执行一个shell(ksh?csh?bash ??它取决于你的unix配置),试图理解并运行你的“blahblah”句子。

如果您的jvm实际上使用的是500 MB,那么分叉的进程在启动时会有相同的大小......

然后shell将以与java进程相同的“shell上下文”开始,也就是说相同的PATH,别名等。甚至“chmod”也可能有别名,所以最好调用chmod的完整路径(/ bin / chmod,/ usr / bin / chmod ......这取决于unix的味道......)。

在shell执行期间,你的java程序被冻结,如果由于任何原因shell挂起,你就无法解冻它。

最后,它甚至不确定java程序的unix所有者是否有足够的权限来更改文件上的此类信息(例如,可以允许他创建文件,但不能更改用户级别权限)。 / p>

也许您尝试在java级别处理应该在操作系统级别解决的问题?

答案 4 :(得分:1)

以下是代码: -

List<String> chPermList = new LinkedList<String>();
chPermList.add("/bin/chmod");
chPermList.add("777");
chPermList.add(Path_to_image_file);


    public void changePermission(List chPermList)
    {
        ProcessBuilder pb = null;
        pb = new ProcessBuilder(chPermList);
                pb.redirectErrorStream(true);

                Process p = pb.start();

                BufferedReader br = new BufferedReader(new InputStreamReader(p
                        .getInputStream()));

                p.waitFor();

                if(p.exitValue()!=0)
                {
                    strExpMsg = "The permission change failed with exit value" + p.exitValue();

                }
    }