2014-09-29 52 views
0

標準的Java包查找了當地將de_CH和名稱 FOO在包條檢查以下資源:我可以擴展Java Bundle查找以返回解散的屬性文件嗎?

class bar.foo_de_CH 
file bar/foo_de_CH.properties 
class bar.foo_de 
file bar/foo_de.properties 
class bar.foo 
file bar/foo.properties 

我可以擴展這一機制在搜索中包括以適當的順序 以下資源:

file bar/foo_de_CH.propertiesx 
file bar/foo_de.propertiesx 
file bar/foo.propertiesx 

並通過解壓縮來加載.propertiesx資源? 我看到有一個類ResourceBundle.Control,因爲 JDK 1.6。但在JDK 1.5之前有沒有辦法?

再見

回答

1

簡單:一類bar.foo_de_CH甚至壓倒一切的ListResourceBundle的,而不是PropertiesResourceBundle。

您可以從.propertiesx文件生成ListResourceBundles,而不是將它們保存爲資源文件,但將它們保存在生成​​項目的Java代碼中。易在行家:

  • 項目Propertiesx到ListResourceBundle的轉換器項目
  • 項目與propertiesx文件
  • 主要項目,在預編譯階段獲取並轉換propertiesx文件
+0

權,但屬性文件的優雅之處在於它們不會影響類空間。這在新的JVM中並不是什麼問題,因爲我認爲perm空間已經被堆代替了。對?但還有另一個不這樣做的原因,可能是Java類的代碼長度限制。 http://chrononsystems.com/blog/method-size-limit-in-java – 2014-09-29 11:17:22

+0

問題是java 1.5。帶有'protected Object [] [] getContents()'的''''''''ListResourceBundle''可能會動態地從propertiesx中加載數組。重寫PropertyResourceBundle可能是可行的,因爲您可以包裝構造函數的流/讀取器。但是,擴展是錯誤的。注意,也有Properties類,但不幸的是它有不同的用法。 – 2014-09-29 11:54:15

+0

投票,只是因爲它是一個解決方案。但是很好地說「動態加載propertiesx」與「預編譯階段獲取」的步驟不同,對嗎? – 2014-09-29 12:13:43

相關問題