簡體   English   中英

Java相對文件路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM