簡體   English   中英

找出在Java中存儲本地文件的位置

[英]Figuring out where to store local files in Java

由於我認為超出此問題范圍的原因,我想移動我編寫的用於Java Web Start的程序以停止使用JWS並將其作為普通的Jar文件分發。

這個計划的主要問題是如何確定在Java中以一種不錯的方式存儲文件的位置,假設我將在不同的平台上運行(雖然我也依賴於JOGL,所以沒有很大的風險可靠地運行深奧的平台,至少)。 我的程序存儲各種本地數據,主要用於緩存或“緩存”目的 - 能夠保留它是非常好的,但如果數據丟失則不是完全災難。

我目前使用JNLP PersistenceService來實現這個目的,所以搬出JWS我需要找出一些存儲文件的目錄。 考慮一下:

File datadir = new File(System.getProperty("user.home"), ".myprogram");

我認為這在Unix和類Unix平台上運行良好,但至少在Windows等平台上顯然很難看 ,我想我應該使用AppData目錄或者再次調用它。

我目前的想法是使用這個datadir作為默認的回落,除了在已知的平台上,我用更好的東西替換它,比如Windows。 我對此的問題是:

  • 這是一個合理的默認開頭嗎? 在一些未知的平台上失敗,我很好; 如果是這種情況,我會默默地禁用緩存和一些擴展功能,但它是否會以某種方式失敗,從而導致不良結果?
  • 有沒有什么好方法可以搞清楚我在Windows上? 我現在能os.name的最好的事情是將一些模式與os.name相匹配,我認為它應該運行得很好,但是有更好的方法嗎? 我本質上不介意用反射進行測試,以查看是否存在一些可能有所幫助的sun.*包(具有回退到默認值的風險),如果這是好的話。 (問題一般適用於所有平台;是否有任何一些有用的習慣用法來解決這個問題?)
  • 有沒有一個很好的方法來確定在Windows上使用的目錄? 使用靜態路徑似乎很難看,因為我知道它們可以被注冊表設置覆蓋,或者被本地化等等。
  • 從一開始我是否應該考慮其他任何平台? 我的datadir應該可以在OSX上正常工作,對嗎?
  • 還有更好的選擇嗎?

如果它只是可替換的緩存數據,我建議使用臨時目錄。

看到:

new File(File.createTempFile().getParent(), 'my-file-name');

您可以將其設置為在應用關閉時銷毀,或者將其保留在那里。

如果你想要更多的半永久物品,但是你可能需要關注你所使用的操作系統並采取相應的行動,就像他的問題的答案一樣

考慮使用java.util.prefs.Preferences API來實現此目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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