2016-08-07 55 views
0

我想从我的项目的类路径以外的某个文件夹加载.properties文件,以便为我的ResourceBundle加载进行国际化。我有这样的结构:[i18n]从类路径中加载资源包

MyProject 
    | 
    - src 
     | 
     -com 
     | 
      -company 
      | 
       -UI 
       -launcher 
       -resources 
        | 
        -i18n.properties 
        -i18n_en_US.properties 
        -i18n_es_ES.properties 
        -i18n_zh_CN.properties 

显然,这是不是把所有i18n文件相同的水平下为src文件夹清晰。那么,我如何加载它们呢?更确切地说,在加载我的资源包的行中,我应该如何放置baseName部分?

bundle = ResourceBundle.getBundle(baseName,localeInSettings); 

我已经看到了答案,但不是很清楚。当我找到一些东西时,我会与所有人分享并更清楚地说明问题。

+0

问题是:“src”的位置并不重要。问题是:在构建你部署的东西时,你在哪里复制它? – GhostCat

+0

你是说如果我把所有的类打包到一个jar文件中,由于jar文件内部结构的改变,位置可能会改变?所以我猜默认它不应该改变,应该吗?必须避免它.. – FaithReaper

回答

0

它仍然在类路径中。只是不在默认包中。所以基本名称应该是

com.company.resources.i18n 
0

随着实验证明,在两种形式的工作:

com/WindThunderStudio/resources/i18n 

而且,

com.WindThunderStudio.resources.i18n 

首先,它是从装载正常的属性文件不同,在完成路径之前,你没有用“/”标记你的绝对路径。其次,第一种形式的工作原理与我们所有人的预期一样,因为baseName预期为“完全限定名称”,即具有“。”的路径。作为第二种形式,我们可以从JavaDoc引用ResourceBundle

注意:baseName参数应该是完全限定的类名称。但是,为了与早期版本兼容,Sun的Java SE运行时环境不验证这一点,因此可以通过指定路径名(使用“/”)而不是完全限定的类名(使用“。”)来访问PropertyResourceBundles。 。