我有一個Java問題,我一直有麻煩:什麼是一種很好的方式來指示相對文件路徑。Java相對文件路徑
讓我更具體。我希望能夠說,總是在./configuration/file.txt
尋找配置文件。我遇到的問題是,如果從程序文件所在的目錄啓動,我的程序將只能正常工作。如果我從其他目錄(如./directory/to/my/program/execute.sh
)啓動它,則無法正常運行。
但是我還需要更改這個文件,資源似乎想要爲只讀...
我有一個Java問題,我一直有麻煩:什麼是一種很好的方式來指示相對文件路徑。Java相對文件路徑
讓我更具體。我希望能夠說,總是在./configuration/file.txt
尋找配置文件。我遇到的問題是,如果從程序文件所在的目錄啓動,我的程序將只能正常工作。如果我從其他目錄(如./directory/to/my/program/execute.sh
)啓動它,則無法正常運行。
但是我還需要更改這個文件,資源似乎想要爲只讀...
你需要通過一個環境變量定義的目錄,如提供了一種機制,一個命令行參數,配置文件,首選項API等。
建議(以便應用程序獨立於環境特定的詳細信息)讀取配置信息的方式是將其讀取爲類路徑資源而不是一個文件系統資源。閱讀 Smartly load your properties瞭解更多詳情。
閱讀Class.getResourceAsStream javadoc關於如何指定資源路徑
有用的帖子在SO語法:Classpath resource within jar
如果你想/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);
}
爲確保您的數據始終位於相同的位置,您可以使用主目錄。利用主目錄會給你在不同的平臺一定的一致性,並不管你的程序可以訪問它在目錄中的數據
例如:
String userHomeDir = System.getProperty("user.home", ".");
String systemDir = userHomeDir + "/.collection";
然後你可以檢索文件後來有類似的東西
String fileLocation = systemDir + "/file.txt";
另請參閱[本答案](http://stackoverflow.com/a/5052359/418556)。 – 2011-12-26 22:18:07
你的意思是'./configuration/file.txt'而不是'/ configuration/file.txt'。第二條路是絕對的,不應該引起問題。 – 2011-12-26 19:44:30
thx良好的捕獲,糾正了錯字 – 2011-12-26 21:34:01
如果您需要修改配置設置的功能,您可以將資源的* real *配置文件的絕對路徑。 – 2011-12-26 23:46:11