2011-12-17 41 views
1

我有一個使用java.util.Properties類的應用程序將設置存儲在文件中。 我加載該文件是這樣的:在命令行上運行.jar時無法訪問

props.load(new FileInputStream("c2c_stngs.prop")); 

一切運作良好的IDE,也是建設和.jar文件,雙擊後的作品。

我的問題,當我嘗試在命令行這樣運行了它開始:

java -jar c:\Works\project.jar 

它拋出一個錯誤:

java.io.FileNotFoundException: c2c_stngs.prop (The system cannot find the file specified) 

我有c2c_stngs.prop文件相同的文件夾中。 jar文件。 另外我試過以管理員身份運行cmd,但仍然是一樣的。

+2

屬性意味着保持不變,還是可以由用戶(或應用程序)編輯?另見[這個答案](http://stackoverflow.com/questions/5052311/how-can-a-java-program-use-files-inside-the-jar-for-read-and-write/5052359#5052359 )爲更好的策略編輯屬性。 – 2011-12-17 13:02:11

回答

3

這是因爲您正在通過路徑訪問您的jar。嘗試改變你的腳本是這樣的:

C: 
CD \Works 
java -jar project.jar 

這應該工作,但不是解決您的問題。如果你期望你的屬性文件總是駐留在你的jar文件的位置,那麼你需要找到你的jar文件。請參閱Finding the path to a jar from a Class inside it?

喜歡的東西:

File propertiesFile = new File("c2c_stngs.prop"); 
if (!propertiesFile.exists()) { 
    // Wont work 'cause getLocation returns a URL but you get my drift. 
    propertiesFile = new File(getLocation(this.class), propertiesFile); 
} 
+0

謝謝,就是這樣,簡單!你不相信,我開始尋找註冊表,看看是否有任何額外的參數,通過雙擊.jar;) – 2011-12-17 13:32:49

2

您使用相對路徑來加載屬性文件。這意味着代碼需要將屬性文件放在啓動程序的目錄中。因此,如果您在c:\啓動java時,該文件必須在c:\中,而不是在jar所在的目錄中。

如果屬性是read_only,則文件應該放在jar文件中,並且應該使用Class.getResourceAsStream()從類路徑加載它。如果它是讀取/寫入,請使用絕對路徑加載文件。

+0

謝謝,我已經想過,但我需要寫的很好。我的部署腳本是將jar複製到某個目錄,所以我只是對路徑進行了硬編碼。 – 2011-12-17 13:35:35