Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java代码将映像权限模式更改为777?_Java_Nio - Fatal编程技术网

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

如何使用Java代码将映像权限模式更改为777?,java,nio,Java,Nio,我想使用Java代码为图像文件提供权限模式值“777”。我如何使用Java实现这一点?因为我无法删除默认权限模式为“664”的图像 它是NIO包的一部分。你可以通过电脑来做 不过,这只是在中,已经有一段时间了。您可以使用“exec”方法运行外部命令来执行chmod Runtime.getRuntime().exec( "chmod 777 myfile" ); 您可以创建与文件关联的对象,然后使用和更改权限。当然,如果您的程序没有更改文件访问权限的权限,这些操作将失败。不幸的是,Java没有抓

我想使用Java代码为图像文件提供权限模式值“777”。我如何使用Java实现这一点?因为我无法删除默认权限模式为“664”的图像

它是NIO包的一部分。你可以通过电脑来做


不过,这只是在中,已经有一段时间了。

您可以使用“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);但它不起作用