【发布时间】:2026-01-20 20:15:02
【问题描述】:
我正在尝试使用环境变量在特定文件夹中创建 Path 类的实例。这是我的代码:
Path pathName = Paths.get(System.getenv("USER") + "/AGENDA");
System.out.println(chemin);
if(Files.exists(pathName)) {
System.out.println("Directory already exists!");
}
else
{
try {
Files.createDirectories(pathName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Directory newly created!");
}
当我运行时,控制台显示:
/feujio/AGENDA
java.nio.file.AccessDeniedException: /feujio
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)
at java.nio.file.Files.createDirectory(Files.java:674)
at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)
at java.nio.file.Files.createDirectories(Files.java:767)
at File.FilePaths.createPath(FilePaths.java:44)
at File.FilePaths.main(FilePaths.java:63)
Directory newly created!
当我不使用环境变量时,它可以工作。我无法解释这种行为。
【问题讨论】:
-
所以目录应该以斜杠开头,即
/my-username/AGENDA? -
它显示了同样的问题。我写道:
Path pathName = Paths.get("/" + System.getenv("USER") + "/AGENDA"); -
AccessDeniedException提示你运行Java进程的用户的文件权限有问题。 -
不使用环境变量时,目录使用什么路径?我的怀疑是你想把它放在用户的主目录中,即
home/feujio/AGENDA而不是/feujio/AGENDA。 -
当我不使用环境变量时,我设置了一个相对于我的 eclipse-workspace 文件夹的路径。我的意思是如果我设置
pathName = Paths.gets("../../AGENDA"),目录将在我的 eclipse-workspace 文件夹中创建。我做pathName = Paths.get("../../../AGENDA")然后在我想要的文件夹中创建目录。这个解决方案不满足我,因为我希望它可以在其他操作系统上工作。这里我使用的是 Linux 操作系统。
标签: java file exception java.nio.file