【问题标题】:Java - How to get the correct absolute path of a file within a projectJava - 如何在项目中获取文件的正确绝对路径
【发布时间】:2017-04-06 07:59:52
【问题描述】:

我的 Java 项目的文件夹中有一个 XML 文件,我想获取它的绝对路径,因此我可以将它作为文件加载以解析它 (DOM)。我不想使用绝对/相对路径,而是只想指定文件名,然后获取绝对路径。我尝试了几种不同的方法,但我得到的路径中总是缺少一个文件夹名称。

我明白了:

C:\Users\user\workspace\projectName\Input.xml<br>

代替:

C:\Users\user\workspace\projectName\\**Folder1**\\Input.xml

-

File input = new File(project.getFile("Input.xml").getLocation().toString());`
File input = new File(project.getFile("Input.xml").getRawLocation().makeAbsolute().toString());
File input = new File(project.getFile("Input.xml").getLocationURI().getRawPath().toString());
File input = new File(project.getFile("Input.xml").getFullPath().toFile().getAbsolutePath());

我怎样才能得到正确的路径,包括Folder1

【问题讨论】:

  • getResourceAsStream()怎么样?
  • getResourceAsStream() 仅在文件是包含在类路径中的资源时才有效,可能不是这种情况
  • 如果你有一个File对象dir代表一个文件夹,你可以用new File(dir, "foo")引用其中的文件foo,但是如何应用这个也取决于@987654333 @对象是。
  • 解决方案有三种变体,视情况而定:stackoverflow.com/a/56327069/715269

标签: java absolute-path


【解决方案1】:

阅读您的问题(您的项目位于工作区目录中)我想您说的是 Eclipse 中的一个项目。

您的应用程序在 Eclipse 中运行的默认目录就是您项目的基本目录。

所以如果你在你的 main 中运行这样的东西:

Files.newDirectoryStream(Paths.get("."))
     .forEach(path -> {
       System.out.println(path);
       System.out.println(path.toFile().getAbsolutePath());
     });

您应该会看到项目中的所有文件和目录。

因此,如果您想要的只是项目运行的绝对路径:

System.out.println(Paths.get(".").toFile().getAbsolutePath());

如果你想打开资源Input.xml只指定名称,我建议将你需要的所有文件移动到一个目录中并运行这样的方法:

  public static File getFileByName(String name, String path) throws IOException {
    ArrayList<File> files = new ArrayList<>();
    Files.newDirectoryStream(Paths.get(path))
         .forEach(p -> {
           if (p.getFileName()
                   .equals(name))
             files.add(p.toFile());
         });
    return files.size() > 0 ? files.get(0) : null;
  }

【讨论】:

  • 这将是某种插件,我不想依赖相对路径。我的方法将只接收它必须查找的文件名。没有办法吗?
  • 为什么不在目录中搜索您的文件?我刚刚更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多