如何使用Java代码将映像权限模式更改为777?
我想使用Java代码为图像文件提供权限模式值“777”。我如何使用Java实现这一点?因为我无法删除默认权限模式为“664”的图像 它是NIO包的一部分。你可以通过电脑来做如何使用Java代码将映像权限模式更改为777?,java,nio,Java,Nio,我想使用Java代码为图像文件提供权限模式值“777”。我如何使用Java实现这一点?因为我无法删除默认权限模式为“664”的图像 它是NIO包的一部分。你可以通过电脑来做 不过,这只是在中,已经有一段时间了。您可以使用“exec”方法运行外部命令来执行chmod Runtime.getRuntime().exec( "chmod 777 myfile" ); 您可以创建与文件关联的对象,然后使用和更改权限。当然,如果您的程序没有更改文件访问权限的权限,这些操作将失败。不幸的是,Java没有抓
不过,这只是在中,已经有一段时间了。您可以使用“exec”方法运行外部命令来执行chmod
Runtime.getRuntime().exec( "chmod 777 myfile" );
您可以创建与文件关联的对象,然后使用和更改权限。当然,如果您的程序没有更改文件访问权限的权限,这些操作将失败。不幸的是,Java没有抓住系统文件属性,因为它将打破Java的黄金规则“写一次,到处运行” 事实上,当您写下希望对该文件进行777访问时,这显然意味着您处于unix下。但是,例如在Windows下,这样的请求意味着什么呢 因此,要解决特定的操作系统主题,就必须使用特定的函数,这并不奇怪。这是使用一种声称(有充分理由)是“平台独立”的语言所要付出的代价 更安全的方法是使用一个JNI库来实现您想要的东西。 一种简单但肮脏且危险的方法是使用Runtime.getRuntime().exec(“chmod 777 myFile”) 为什么危险?事实上,当一个人叫这样的执行官(“blahblah”)时会发生什么 运行java程序的unix进程分叉;然后,“复制”进程执行一个shell(ksh?csh?bash??它取决于您的unix配置),该shell尝试理解并运行“blahblah”语句 如果您的jvm实际使用的是500 MB,那么分叉进程在启动时的大小将是相同的 然后shell将以与java进程相同的“shell上下文”开始,即相同的路径、别名等。甚至“chmod”也可能有别名,因此最好调用chmod的完整路径(/bin/chmod,/usr/bin/chmod…这取决于unix风格…) 在shell执行期间,您的java程序被冻结,如果shell由于任何原因挂起,您将无法解冻它 最后,甚至不确定java程序的unix所有者是否有足够的权限更改文件中的此类信息(例如,他可以创建文件,但不能更改用户级别的权限) 也许您试图在java级别处理一个应该在操作系统级别解决的问题?下面是代码:-
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();
}
}
List chPermList=newlinkedlist();
chPermList.add(“/bin/chmod”);
chPermList.add(“777”);
添加(路径\到\图像\文件);
公共作废更改权限(列表chPermList)
{
ProcessBuilder pb=null;
pb=新的ProcessBuilder(chPermList);
pb.重定向错误流(真);
进程p=pb.start();
BufferedReader br=新的BufferedReader(新的InputStreamReader(p
.getInputStream());
p、 waitFor();
如果(p.exitValue()!=0)
{
strExpMsg=“权限更改失败,退出值为”+p.exitValue();
}
}
PosixFilePermission不在Java 6中。请下载Java 7的快照。我使用Java 1.4,无法同时使用该版本。删除文件实际上需要对父目录的写入权限,而不是文件本身。如果用户或组匹配777也不比664好。没有理由在映像上打开执行位。对于任何类型的文件,您几乎不需要777权限,对于不可执行的文件,您绝对不需要777权限。我只能得到setReadOnly()方法,我使用的是java 1.4,虽然我不能更改SDKI,但如果您仅限于java 1.4,我想您将不得不使用exec命令。@Raja:对不起,这些似乎是java 1.6文件API的一部分。我应该在777之后提供文件路径名吗例如:Runtime.getRuntime().exec(“chmod 777 d:/sample.jpeg”);好的,如果您的文件是'd:/sample.jpeg',这可能不起作用。chmod是一个*nix命令,除非安装了cygwin(或其他unix/win32系统),否则无法在windows上运行。也许你问错问题了?哦,但是是的。。。我将完整路径名放入'myfile'字符串pathX=getServletContext().getRealPath(“myfileName.jsp”);Runtime.getRuntime().exec(“chmod 777”+pathX);但它不起作用