Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从jar中加载ResourceBundle_Java_Jar_Resourcebundle - Fatal编程技术网

Java 从jar中加载ResourceBundle

Java 从jar中加载ResourceBundle,java,jar,resourcebundle,Java,Jar,Resourcebundle,我已经看到了一些关于如何通过getResourceAsStream在jar中加载特定文件的答案,我可以管理它。 然而,我面临着一些非常具体的问题,我在论坛上找不到答案 以下是配置: 我有一个jar文件,它有一个conf目录,其中包含两个属性文件messages\u en\u US.properties和messages\u fr\u fr.properties。加载此类资源的经典方法是使用 ResourceBundle.getBundle("messages", java.u

我已经看到了一些关于如何通过getResourceAsStream在jar中加载特定文件的答案,我可以管理它。 然而,我面临着一些非常具体的问题,我在论坛上找不到答案

以下是配置:

我有一个jar文件,它有一个conf目录,其中包含两个属性文件messages\u en\u US.propertiesmessages\u fr\u fr.properties。加载此类资源的经典方法是使用

ResourceBundle.getBundle("messages", java.util.Locale.getDefault());
如果文件在磁盘上,在程序类路径引用的目录中,这可以正常工作。但是我不知道如何将ResourceBundle.getBundle的使用和jar中资源的使用结合起来。 事实上,由于我无法通过getResourceAsStream看到任何桥接(或者这意味着我自己管理locale来指定整个资源文件名,这不是很聪明)。

您尝试过吗

ResourceBundle.getBundle("conf/messages", java.util.Locale.getDefault());

如果它位于jar中的conf目录中,那么您尝试加载的包是
conf
,您应该使用

ResourceBundle.getBundle("conf.messages", java.util.Locale.getDefault());
说:


ResourceBundle始终搜索属性文件,因此,如果运行:

ResourceBundle.getBundle("messages", java.util.Locale.getDefault());

ResourceBundle将在您的类路径中搜索“messages.properties”。

假设文件messages.properties是某个xyz.jar的一部分,该xyz.jar已经在您要使用它的项目的类路径上。此文件在jar中的打包如下:

src
   |main
       |resources
            |com
                |xyz
                   ....|message.properties 
要读取此文件,请执行以下操作:

import java.util.ResourceBundle;


谢谢

罐子里的文件在哪里?如果它保留在JAR中,则意味着它位于类路径中,并且使用ResourceBundle正常加载它不会有问题。GetBundle我也有同样的问题,我在JAR文件中有一个属性资源,但该JAR文件不在程序类路径中。我阅读了关于PropertyResourceBundle的javadoc,我知道我可以用inputstream做到这一点,但inputstream意味着IO每次都会读取文件,我会丢失默认的ResourceBundle缓存。有没有一种方法可以指导ResourceBundle类从其类路径之外的资源获取捆绑包?ResourceBundle.Control也可以实现自定义,但似乎有些过分,最好找到将属性文件放入类路径的方法。JAR文件并不意味着它必须位于类路径中。我认为最初的作者是想说当在类路径之外时如何访问资源包。一种方法是将PropertyResourceBundle与InputStream一起使用,但这样会丢失缓存,并且无论何时进行绑定,都必须进行新的绑定。我也有同样的问题,我有一个不在类路径中的资源。
import java.util.ResourceBundle;
ResourceBundle.getBundle("com.xyz.resources.messages", Locale.getDefault());