2017-04-06 198 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