【问题标题】:Can't Change File Permissions from Within a Java Program无法从 Java 程序中更改文件权限
【发布时间】:2017-10-12 12:30:48
【问题描述】:

我有一个 Java 程序,它在运行时将一些可执行文件提取到特定文件夹,并尝试运行它们。当然,在运行可执行文件之前,需要更改其权限。为此,我使用了以下代码:

public static void changePermissions(String filename,String path){
    String[] cmd=new String[3];
    cmd[0]="chmod";
    cmd[1]="u+x";
    cmd[2]=filename;
    BetterRunProcess process=new BetterRunProcess();
    process.runProcessBuilderInDifferentDirectory(cmd,path,1,0,0,"");
}

在上面的代码sn-p中,变量path包含可执行文件的路径,filename是可执行文件的名称。行:

process.runProcessBuilderInDifferentDirectory(cmd,path,1,0,0,"");

执行命令“chmod u+x ...”。在我自己的电脑上,代码运行得很好,但是当我在别人的电脑上运行它时,会抛出以下错误:

chmod: changing permissions of deviceQuery.out. Operation not permitted. 

有人能找出这背后的问题吗?

这里还有一些代码,可能会有所帮助。

public void runProcessBuilderInDifferentDirectory(String[] cmd,String path,int printToConsole,int printToExternalFile,int append,String fileName){
    ProcessBuilder builder;
    if(cmd.length==1)   builder=new ProcessBuilder(cmd[0]);
    else if(cmd.length==2)  builder=new ProcessBuilder(cmd[0],cmd[1]);
    else if(cmd.length==3)  builder=new ProcessBuilder(cmd[0],cmd[1],cmd[2]);
    else if(cmd.length==4)  builder=new ProcessBuilder(cmd[0],cmd[1],cmd[2],cmd[3]);
    else    builder=new ProcessBuilder(cmd[0],cmd[1],cmd[2],cmd[3],cmd[4]);

    builder.directory(new File(path));
    try {
        Process pr=builder.start();
        if(printToConsole==1) printToConsole(pr);
        if(printToExternalFile==1) printToExternalFile(pr,fileName,append);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

谢谢!

【问题讨论】:

  • 什么是BetterRunProcessrunProcessBuilderInDifferentDirectory 的来源在哪里?
  • 您看到的是chmod 本身打印的错误,因此显然java 部分确实正确执行了您的chmod 命令,但是如果您在其他人的计算机上运行相同的命令(使用相同的用户作为执行java程序的用户),你应该得到同样的错误。
  • 我已经添加了。
  • @HuguesMoreau 你能详细说明一下吗?
  • @Jamil说我现在没有另一台机器,但是当我有时,我会更新你。谢谢。

标签: java linux


【解决方案1】:

从拥有该文件权限的用户运行您的 java 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-16
    • 2010-10-02
    • 2012-07-14
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多