2013-10-08 51 views
0

我可以使用:動態查找項目的目的地

getClass()。getClassLoader()。getResource(「」)。getPath());

動態獲取我的項目中的類文件的路徑。

但我需要爲項目的主目錄動態獲取路徑。我不能這樣做靜態,像這樣:

File file = new File(「C:\ Users \ etc ...」);

因爲項目的目的地可以從一臺計算機更改爲下一臺計算機。我需要在項目的主目錄中調用一個文件。我該如何動態地做到這一點。這和我在這個問題開始時的做法很相似,但它不能僅僅用於類。

有什麼想法?

+0

爲什麼不使用先前的策略爲您的類創建路徑字符串,然後將其用作File構造函數的輸入? – Prateek

+0

項目的主目錄在運行時不存在。你的意思是安裝目錄?說一個網絡應用程序? – EJP

回答

1

Java中沒有這樣的「java項目」。如果你知道你的類文件中關係的任何目錄你試圖找到,你可以使用你所獲得的路徑在您的第一個例子:

Url classUrl = ... 
File resourcePath = new File(classUrl.toUri()); 
File rootDir = resourcePath.getParentFile().getParentFile().getParentFile(); 

File rootDir = new File(resourcePath.getPath() + 
    "/../../../".replace("/", File.separatorChar)); 

當然,這隻會在文件實際上在文件系統上時才起作用;如果它們在jar中,則需要定位jar文件。

但這通常不是你想要做的事情。通過將應用程序作爲命令行參數或環境變量傳遞給應用程序來爲應用程序配置沙箱是一種更好的做法。在某些情況下,使用預定義的系統屬性也很有用,如user.home,user.dirjava.io.tmpdir

+0

原因是,我創建了一個java swing GUI,在這個項目中它將有一個HelpMaker項目(這是一個.chm文件... ex:HelpMaker.chm),它需要指向。我想找出一個方法,這個工作後,java swing項目清理和內置,它將能夠指向這個文件成功。你能想出一個更好的方法來做到這一點? – newmarylandjersey

+0

再一次,Java中沒有這樣的概念作爲「一個項目」。這聽起來像是一個特定的IDE術語。如果你只是試圖訪問一個特定的文件,你可以確保它在類路徑中,並使用ClassLoader.getResource()方法顯式引用它,就像你前面描述的一樣。 – ykaganovich