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

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

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

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

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

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

这只是在Java 1.7中 ,它已经存在了一段时间的已知问题 。

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

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

因此,解决特定操作系统主题不应该是一个惊喜,您必须使用特定的function。 当使用一种声称(有充分理由)是“平台独立”的语言时,这是付出的代价

更安全的方法是使用一个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所有者是否有足够的权限来更改文件上的此类信息(例如,可以允许他创建文件,但不能更改用户级别权限)。

也许你试图在java级别处理一个应该在操作系统级别解决的问题?

这里是代码: –

 List chPermList = new LinkedList(); 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(); } }