2011-12-26 196 views
6

我有一個Java問題,我一直有麻煩:什麼是一種很好的方式來指示相對文件路徑。Java相對文件路徑

讓我更具體。我希望能夠說,總是在./configuration/file.txt尋找配置文件。我遇到的問題是,如果從程序文件所在的目錄啓動,我的程序將只能正常工作。如果我從其他目錄(如./directory/to/my/program/execute.sh)啓動它,則無法正常運行。

但是我還需要更改這個文件,資源似乎想要爲只讀...

+0

你的意思是'./configuration/file.txt'而不是'/ configuration/file.txt'。第二條路是絕對的,不應該引起問題。 – 2011-12-26 19:44:30

+0

thx良好的捕獲,糾正了錯字 – 2011-12-26 21:34:01

+0

如果您需要修改配置設置的功能,您可以將資源的* real *配置文件的絕對路徑。 – 2011-12-26 23:46:11

回答

3

你需要通過一個環境變量定義的目錄,如提供了一種機制,一個命令行參數,配置文件,首選項API等。

2

如果你想/configuration/file.txt表示相對於一些文件,你必須定義什麼的東西是。我們通常會讓某些東西成爲「類路徑或當前目錄」。你將不得不編寫一些代碼來完成這個工作。下面的一些東西(未經測試)。

public InputStream getResource(String path) throws IOException { 
    // try relative to current directory 
    File file = new File(path); 
    if (file.exists()) { 
    return new FileInputStream(file); 
    } 
    // try the classpath 
    return Thread.currentThread().getContextClassLoader().getResourceAsStream(path); 
} 
3

爲確保您的數據始終位於相同的位置,您可以使用主目錄。利用主目錄會給你在不同的平臺一定的一致性,並不管你的程序可以訪問它在目錄中的數據

例如:

String userHomeDir = System.getProperty("user.home", "."); 
String systemDir = userHomeDir + "/.collection"; 

然後你可以檢索文件後來有類似的東西

String fileLocation = systemDir + "/file.txt"; 
+0

另請參閱[本答案](http://stackoverflow.com/a/5052359/418556)。 – 2011-12-26 22:18:07