【问题标题】:Permission Denied: File Creation in Java权限被拒绝:在 Java 中创建文件
【发布时间】:2013-01-03 00:19:21
【问题描述】:

使用 Mac 在 Eclipse 中编译以下代码后:

    import java.io.*;

    public class Filer{
        public static void main(String[] args) throws IOException{

        File f1;

        f1 = new File("/System/file.txt");

        if(!f1.exists()){
            f1.createNewFile();

        }
      }
    }

我得到一个错误:

    Exception in thread "main" java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.createNewFile(File.java:883)
        at Filer.main(Filer.java:11)

谁能告诉我这是为什么?有什么办法可以更改权限吗?如果我将其编译为 .jar 文件并将其发送给某人,该人是否拥有正确的权限?

【问题讨论】:

  • 不是任何人都可以在文件系统的任何位置写入。 /System 看起来像 OS X,它归 root 所有,他是唯一可以在那里写的人。也许选择了另一个目录?

标签: java file file-io


【解决方案1】:

谁能告诉我这是为什么?

您的用户无权在该目录中创建文件。

有没有办法改变权限?

与更改任何目录的权限相同。

在 Java 7+ 中

Files.setPosixFilePermisions(f1.toPath(), 
    EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_EXECUTE));

如果我将其编译为 .jar 文件并将其发送给某人,该人是否拥有正确的权限?

我怀疑名为/System 的目录的正确权限是您没有写入权限。

有什么理由不使用主目录或当前工作目录?

【讨论】:

  • 或者,使用sudo java 运行代码(并接受它在 Eclipse 中不起作用)。不过,完全不写信给/System 是更好的解决方案!
  • 将其发送到桌面会是更好的选择吗?有没有办法检测当前计算机的用户名?即 /Users/**username**/Desktop/file.txt
  • 您可以使用用户的主目录,例如System.getProperty("user.home") + "/Desktop"docs.oracle.com/javase/tutorial/essential/environment/…
  • 解释一下“就像更改任何目录的权限一样”会很棒
  • 如果您没有对该目录的写入权限,那么您不太可能有足够的权限来更改它。
【解决方案2】:

系统目录只允许有特殊权限的用户写入。

普通用户只能在自己的主目录中写入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 2011-07-29
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2018-02-10
    • 2012-08-18
    • 2016-01-01
    相关资源
    最近更新 更多