Java IOException:在作为所有者运行时,Linux上的权限被拒绝

时间:2012-07-31 09:59:39

标签: java linux io file-permissions chmod

我需要创建一些目录和文件,所有这些目录和文件都应该有权限0600 当我从NetBeans Debug运行时: 创建目录后,当我尝试存储一些文件时,我得到IOException“Permission Denied”消息,同时两个目录和文件是用同一个应用程序同时创建同一个用户所以我认为0600(所有者读/写)应该工作。
当运行Jar文件时,chmod根本不起作用! 我的代码是:

if(!Dest.exists()){
   boolean res=dirs.mkdirs();
   if(res){
      Runtime.getRuntime().exec("chmod -R 600 '"+dirs.getAbsolutePath()+"'");                
    }
}
File Destination=new File(Dest, source.getName());
documentManager.copyFile(source, Destination);

并且copyFile是:

public static void copyFile(File sourceFile, File destFile) throws FileNotFoundException,IOException {
    if(!destFile.exists()) {
        destFile.createNewFile();
    }

    FileChannel source = null;
    FileChannel destination = null;
    try {
        source = new FileInputStream(sourceFile).getChannel();
        destination = new FileOutputStream(destFile).getChannel();
        destination.transferFrom(source, 0, source.size());
    }
    finally {
        if(source != null) {
            source.close();
        }
        if(destination != null) {
            Runtime.getRuntime().exec("chmod 600 '"+destFile.getAbsolutePath()+"'");
            destination.close();
        }
    }
}

有什么问题?

由于

3 个答案:

答案 0 :(得分:2)

目录需要设置可执行位才能将文件写入其中。在目录上尝试chmod + x。

mkdir tmp2323
chmod a-x tmp2323
touch tmp2323/test
touch: cannot touch `tmp2323/test': Permission denied

答案 1 :(得分:1)

为了所有人:

dirs.setWritable(true, false);

仅适用于所有者:

dirs.setWritable(true, true);

dirs.setWritable(true);

答案 2 :(得分:-1)

如果您想在家中创建文件,请运行chmod 777 /home。否则将/home更改为其他目录。然后您的简单代码就可以创建文件了。