[英]Java relative file paths
我遇到了一個Java問題,一直困擾我:什么是指示相對文件路徑的好方法。
讓我更具體一點。 我想可以說總是在./configuration/file.txt
尋找配置文件。 我遇到的問題是,我的程序只有從文件所在的目錄啟動時才能正常運行。如果相反,我是從其他目錄(如./directory/to/my/program/execute.sh
啟動的,則它無法正常運行。
但是我還需要對此文件進行更改,並且資源似乎希望是只讀的...
建議的讀取配置信息的方式(使該應用程序不依賴於環境的特定細節)是將其讀取為類路徑資源而不是文件系統資源。 閱讀“ 智能加載屬性”以獲取更多詳細信息。
閱讀Class.getResourceAsStream javadoc以獲取有關如何指定資源路徑的語法
SO上的有用文章: jar中的類路徑資源
您需要提供一種用於定義目錄的機制,例如通過環境變量,命令行參數,配置文件,首選項API等。
為確保數據始終位於同一位置,可以使用主目錄。 利用主目錄可以使您在不同平台上保持一定的一致性,並且程序可以訪問數據,而不管其位於哪個目錄中。
例如:
String userHomeDir = System.getProperty("user.home", ".");
String systemDir = userHomeDir + "/.collection";
然后您可以稍后使用類似的方法檢索文件
String fileLocation = systemDir + "/file.txt";
如果要/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 );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.