簡體   English   中英

Java ResourceBundle.getBundle如何加載屬性文件?

[英]How does Java ResourceBundle.getBundle load properties file?

我花了一些時間嘗試加載屬性文件,但找不到任何有效的解決方案。 這是我的設置的圖片。

屬性文件位置:/sandbox/resources/properties/MessageBundle_zh_CN.properties

應用程序位置:/sandbox/src/main/java/com/app/sandbox/App.java

在此處輸入圖片說明

不知道發生了什么。 我嘗試了幾種組合,但無法克服異常。 我什至嘗試了文件夾的整個路徑。 誰能告訴我ResourceBundle.getBundle()方法如何查找屬性文件?

更新1:此解決方案在幾分鍾后停止工作:

ResourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");

更新2:以上解決方案在我上次運行時不再起作用。 所以我將其更改為:

ResourceBundle mybundle = ResourceBundle.getBundle("properties/MessageBundle");

而且有效。 似乎ResourceBundle如何查找屬性文件可能存在緩存問題。

我仍然不確定ResourceBundle類如何查找屬性文件。 它說要傳遞“ baseName”參數:

baseName - the base name of the resource bundle, a fully qualified class name

https://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html#getBundle(java.lang.String)

但目前尚不清楚它如何開始查找文件。 它是否從項目目錄的根目錄開始查找? 如果有人可以回答這個問題,那就太好了。 完全限定的類名是什么意思。 我不認為“ properties.MessageBundle”是完全合格的。

嘗試如下使用;

ResourceBundle bundle = ResourceBundle.getBundle("properties/MessageBundle");

是的,這應該是這樣的:

R`esourceBundle mybundle = ResourceBundle.getBundle("MessageBundle");`

它無需指定整個路徑就可以在屬性包中找到它的原因是因為Java知道默認情況下捆綁包應該在該包中,並且不需要其他部分。 因此,如果您使用整個路徑,例如: "/sandbox/resources/properties/MessageBundle" ,則Java會將其解釋為:

"/sandbox/resources/properties/MessageBundle/sandbox/resources/properties/MessageBundle"

這顯然是不正確的。 因此,如果您需要在properties包中創建更多包,只需從那里而不是從項目的根目錄開始。

暫無
暫無

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

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