Java 资源包
Java ResourceBundle
我已经 Java 几个月没有编程了,我有一个小应用程序要开发供我自己使用。我卡在 ResourceBundle 上了!我记得它很容易使用,所以我想我的问题很容易解决,但需要新的眼光:)
Locale frLocale = new Locale("fr","CA");
Locale enLocale = new Locale("en","CA");
String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir); // current dir = D:\RP1.8.2
Path p = FileSystems.getDefault().getPath(dir,"test.properties");
System.out.println("Path : "+p.toAbsolutePath().toString()); // Path : D:\RP1.8.2\test.properties
boolean exists = Files.exists(p);
System.out.println("File found: "+exists); // File found: true
ResourceBundle bundle = ResourceBundle.getBundle(p.toAbsolutePath().toString());
/* Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name D:\RP1.8.2\test.properties, locale fr_CA */
String title = bundle.getString("main.title");
System.out.println("Titre = "+title);
所以我的属性文件存在,但 ResourceBundle 找不到它……很奇怪。
在用户目录中,我有 3 个文件:
test.properties、test_fr.properties 和 test_fr_CA.properties
有什么线索吗?
谢谢
如果它是一个 Maven 项目,那么我会右键单击该项目,然后在 "M2 tools" 下,我会 select 生成工件(检查更新),然后单击 "generate OSGI bundles"
getBundle 的参数不是文件名,实际上不能是文件名。 ResourceBundle 文件是 应用程序资源, 并且需要放置在与编译的 classes 相同的位置。 (事实上,ResourceBundle 可以是实际的 Java class 而不是属性文件。)例如:
build
└─classes
└─com
└─example
└─myapp
├─MyWindow.class
├─MyDataImporter.class
├─test.properties
├─test_fr.properties
└─test_fr_CA.properties
代码:
ResourceBundle bundle = ResourceBundle.getBundle("com.example.myapp.test");
我已经 Java 几个月没有编程了,我有一个小应用程序要开发供我自己使用。我卡在 ResourceBundle 上了!我记得它很容易使用,所以我想我的问题很容易解决,但需要新的眼光:)
Locale frLocale = new Locale("fr","CA");
Locale enLocale = new Locale("en","CA");
String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir); // current dir = D:\RP1.8.2
Path p = FileSystems.getDefault().getPath(dir,"test.properties");
System.out.println("Path : "+p.toAbsolutePath().toString()); // Path : D:\RP1.8.2\test.properties
boolean exists = Files.exists(p);
System.out.println("File found: "+exists); // File found: true
ResourceBundle bundle = ResourceBundle.getBundle(p.toAbsolutePath().toString());
/* Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name D:\RP1.8.2\test.properties, locale fr_CA */
String title = bundle.getString("main.title");
System.out.println("Titre = "+title);
所以我的属性文件存在,但 ResourceBundle 找不到它……很奇怪。 在用户目录中,我有 3 个文件: test.properties、test_fr.properties 和 test_fr_CA.properties
有什么线索吗? 谢谢
如果它是一个 Maven 项目,那么我会右键单击该项目,然后在 "M2 tools" 下,我会 select 生成工件(检查更新),然后单击 "generate OSGI bundles"
getBundle 的参数不是文件名,实际上不能是文件名。 ResourceBundle 文件是 应用程序资源, 并且需要放置在与编译的 classes 相同的位置。 (事实上,ResourceBundle 可以是实际的 Java class 而不是属性文件。)例如:
build
└─classes
└─com
└─example
└─myapp
├─MyWindow.class
├─MyDataImporter.class
├─test.properties
├─test_fr.properties
└─test_fr_CA.properties
代码:
ResourceBundle bundle = ResourceBundle.getBundle("com.example.myapp.test");