2012-05-19 48 views
0

我有一個Java應用程序,我打包到一個Mac應用程序包(該文件夾結構包含所有的應用程序,但看起來像一個單一的可執行文件給用戶)。MacOSX上的Java:如何訪問軟件包中的文件

我的問題: 我正在讀取和寫入本地文件夾(「。」)中的一些配置文件。然而,在Mac上這似乎是應用程序包所在的文件夾(所以通常是「應用程序」文件夾,我顯然不想這樣做。)

我的問題: 如何將文件存儲在捆綁?我如何編程方式檢索包名稱計算完全合格的文件夾?

我知道我可以嘗試去ClassLoader的方式,但我想,以避免(出於安全原因)。

或者是否有更好的方法來存儲應用程序緩存和配置數據?

+0

請閱讀鏈接。如果你不這樣做得到一個很好的答案,那麼你應該自己回答,即使它沒有完全回答你的問題,你也應該獎勵好的工作 – Gray

+0

如果它解決了問題,我接受一個答案(或是一個很好的解決方法)。好的工作通過投票獲得回報。如果沒有答案幫助我解決問題,則不接受任何答案。如果我自己沒有回答,那麼因爲我還沒有解決問題。 – Daniel

回答

1

好的,基本的答案/解決方案是:不要這樣做。

我原本想做的原因是在本地HD上緩存大量數據。對於配置數據(即小數據量),Java首選項是一個很好的選擇,但無法處理兆字節大小範圍內的數據。

我的解決辦法:

MacOSX上(System.getProperty("os.name").contains("Mac OS X"))我只是在用戶的個人文件夾(System.getProperty("user.home"))創建一個文件夾。我在該文件夾前加上.以確保它對用戶隱藏。這也確保我可以寫入文件夾(這可能是.app文件夾中的問題,取決於用戶將其複製到的位置)

在Windows(System.getProperty("os.name").contains("Windows"))上,我在System.getenv("APPDATA")目錄中創建該文件夾(注意這個環境變量只存在於Windows系統。

現在我可以完全訪問文件系統(即使沒有管理員權限)和我喜歡可以存儲儘可能多的數據。

+2

實際上,緩存數據應該與'(〜)/ Library/Caches/'或(如果更加永久的話,像大型數據庫和東西一樣)'(〜)/ Library/Application Support/'。我知道我不想在主目錄中使用大型緩存的dotfiles,我可能並不孤單。 – You

+0

好點,我想我會用這個來代替(假設我不需要root權限來寫)。謝謝! – Daniel

1

Mac OS X Finder將任何目錄的名稱以.app結尾作爲應用程序;右鍵點擊到顯示包裝內容。它仍然是一個正常的I/O目錄。 project就是一個例子。有關與應用程序包相關的路徑,請參閱answer

附錄:如何在本地存儲應用程序緩存和配置數據有更好的方法嗎?

example引用的用途java.util.prefs.Preferences,但javax.jnlp.PersistenceServicealternative

+0

對不起,這個答案證明是不可接受的。 – trashgod

+0

對不起,這是一個很好的答案,只是不是真的爲我的問題。問題是如何獲得文件夾的名稱(即.app文件夾的名稱是什麼?)使用首選項不適用於緩存數據(只能處理小數據量) – Daniel

+0

在Mac OS X上,'java.util.Preferences'是通過'〜/ Library/Preferences'中的XML文件實現的;我最大的大概是一兆字節。我不介意'〜/ .appname'文件夾; '〜/ .netbeans'就是一個例子。 @你的建議是推薦的選擇。 – trashgod