2011-08-04 64 views
2

我已經在Eclipse中創建了一個動態Web項目,並且已經編寫了一個簡單的代碼來讀取屬性文件。
這裏是我的代碼從屬性文件中讀取值

public class AutocompleteService { 

public static void main (String args[]) 
{ 
    Properties properties = new Properties(); 
    properties.load(new FileInputStream("autocomplete.properties")); 
    System.out.println("Test : " + properties.getProperty("test")); 
} 

當我運行此我得到的文件未發現異常。

java.io.FileNotFoundException: autocomplete.properties (The system cannot find the file specified) 

我的包結構如下

-src 
- com.serive (package) 
    - AutocompleteService.java 
    - autocomplete.properties 

兩個AutocompleteService.javaautocomplete.properties都在同一個包即com.service。做我們需要別的從性能讀取文件?

編號:http://www.exampledepot.com/egs/java.util/Props.html

〜Ajinkya。

回答

5

相關的信息流中獲取到類:

AutocompleteService.class.getResourceAsStream("autocomplete.properties") 
+0

非常感謝:)它工作並且比其他人更簡單。:) – xyz

+0

雖然應該是'getResourceAsStream'。 – Thilo

+0

@Thilo:是的,它應該是。我用'properties.load(AutocompleteService.class.getResourceAsStream(「autocomplete.properties」));' – xyz

7

,你必須從classpath加載這樣的:前

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
stream = loader.getResourceAsStream(fileName); 

當你有流,你可以將它傳遞給properties.load()

2

你的代碼是看在「當前目錄」當應用程序運行時。

使用Class.getResourceAsStream()可以從類的相同位置讀取。

+0

那麼現在'com.service'不是我目前的目錄嗎? – xyz

+0

不,這取決於您如何啓動應用程序,通常在Eclipse中工作時它將是您的工作區目錄,您可以在「運行配置」,「參數」選項卡中對其進行控制。但是,當你獨立運行應用程序時,你可能會在JAR中安裝應用程序,所以你不能指望類目錄是當前目錄。使用getResourceAsStream(),你可以在Eclipse內部工作並獨立工作。 – djna

0

使用相對路徑將嘗試在運行程序的當前目錄打開一個文件創建的輸入流。在你的情況下,當前目錄是你的servlet容器的執行目錄(Tomcat,Jetty等)

你想要做的是打開一個屬性文件,它與你的類一起,在戰爭中文件。這個屬性文件應該被類加載器覆蓋,並且使用Class.getResourceAsStream()是合適的方式。查看鏈接的javadoc以瞭解哪種路徑將作爲參數提供。

2

「當前」目錄是您啓動服務器的地方,因此請參考相關文件,例如"config/autocomplete.properties"或任何您喜歡的地方。

最好的辦法是知道是什麼問題。像這樣使用代碼,可以幫助您調試問題:

File propertiesFile = new File("config/autocomplete.properties"); 
if (!propertiesFile.exists()) 
    throw new IllegalStateException("Could not find properties file: " + propertiesFile.getAbsolutePath()); 
properties.load(new FileInputStream(file)); 

如果爆炸,異常消息會告訴你它認爲該文件,並yo'll迅速找出如何解決這個問題。