2017-04-06 199 views
0

我在我的Java项目中的文件夹中有一个XML文件,并且我想获取它的绝对路径,所以我可以将它作为文件加载为了解析它(DOM)。而不是使用绝对/相对路径,我只想指定文件名,然后获取绝对路径。我试图用几种不同的方式做到这一点,但总是有一个文件夹名称从我得到的路径中丢失。Java - 如何获得项目中文件的正确绝对路径

我得到:替代

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

+1

如何使用['的getResourceAsStream()'](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#的getResourceAsStream-java.lang.String-)? – Axel

+0

'getResourceAsStream()'只在文件是包含在类路径中的资源时才起作用,它可能不是这种情况 – rrobby86

+0

如果您有一个代表文件夹的'File'对象'dir',则可以引用文件'foo'它与'新文件(dir,“foo”)',但如何应用这也取决于'项目'对象是什么。 – rrobby86

回答

0

读你的问题(你的项目在工作空间目录中)我想你正在谈论Eclipse中的一个项目。

那么您的应用程序运行到Eclipse的默认目录就是您的项目的基本目录。

所以,如果你在你的主要运行是这样的:

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; 
    } 
+0

这将是某种插件,我不想依赖相对路径。我的方法将只接收它必须查找的文件名。没有办法做到这一点? – ERX95

+0

为什么不搜索文件的目录?我刚刚更新了我的答案。 – freedev