ResourseBundle学习笔记“Canot find bundle for base name ”

本文介绍了如何解决Java中ResourceBundle出现的“Can't find bundle for basename”错误及中文乱码问题。首先需要确保资源文件放置在正确的类路径中,然后使用native2ascii工具将资源文件转换为Unicode编码。

1.初步学习

最近在学习ResourseBundle时遇到了“Can't find bundle for base name ”这个错误搞了很久才解决了。原因就是类路径问题要将属性文件放在类路径中!百度里很多都是教程但没有涉及到解决方法! 2.中文显示:

测试文件

java 代码
  1. package com.lht.ResourseBundleStudy;   
  2.   
  3. import java.util.ResourceBundle;   
  4.   
  5. public class ResourseBundleDemo {   
  6.      public static void main(String[] args) {       
  7.      ResourceBundle resource = ResourceBundle.getBundle("test");    
  8.      System.out.print(resource.getString("msg0") + "!");     
  9.      System.out.println(resource.getString("msg1") + "!");    }   
  10.   
  11. }   

 

test.properties

 

msg0="Hello World"
msg1="da jia hao"

开始自己测试的时候:将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一下终于在sun的java论坛

(http://forum.java.sun.com/thread.jspa?threadID=660477&messageID=4231534)中找到了线索下面是帖子的内容:

I've solved the problem the best way possible. Basically what i've done is added a new class folder named config to the project home dir. Then i added this classfolder to the classpath in project properties. After doing all of this you only need to reference the properties file by "Email".

Hope this helps anyone else who is having similiar problems.

基本意思就是在src下建立classes(名字无所谓)文件夹将属性文件存放在下面,然后将这个文件夹加入类路径中!运行就可以了:

加入类路径的方法:你的工程文件夹->properties->选择Libraries选项卡->Add Class Folder将刚才建立的文件夹加入就可以了!

结果如下:

"Hello World"!"da jia hao";!

 2.中文显示

在classes目录下建立message_CH.properties内容如下:

ms0="大家好"

同样用上面的测试文件!

结果如下:"?ó????"!

乱码怎么回事啊!

在百度里搜索后找到了答案有以为网友写的很清楚:http://gostar.bokee.com/3885062.html

下面引用如下:

 原理

Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。而在Java程序中读取Property文件的时候使用的是Unicode编码方式,这种编码方式不同会导致中文乱码。因此需要将Property文件中的中文字符转化成Unicode编码方式才能正常显示中文。

 解决办法

Java提供了专门的工具对Property文件进行Unicode转化,这种工具就是native2ascii,它在JDK安装环境的bin目录下。

native2ascii 工具将带有本机编码字符(非拉丁 1 和非单一码字符)的文件转换成带有Unicode编码字符的文件。

假设需要转化的属性文件为:D:\src\resources.properties(含有中文字符)

转化后的属性文件为:D:\classes\resources.properties(中文字符统一转化为Unicode)

那么使用如下命令
JAVA_HOME\bin\native2ascii -encoding GBK D:\src\resources.properties D:\classes\resources.properties

就能将含有中文字符的属性文件转化成单一Unicode编码方式的属性文件。中文乱码自然会被解决。

通过上面的方法我将生成的文件打开一看内容如下:

 ch="\u5927\u5bb6\u597d"

再运行结果如下:

"大家好"

<think>好的,我现在要解决用户的问题:“java cannot find bundle for base name classInfo.properties solution”。用户遇到了java.util.MissingResourceException,提示找不到名为classInfo.properties的资源包。我需要根据提供的引用信息,整理出解决方法。 首先,我得回顾一下用户提供的引用资料。引用[1]到[5]都是关于类似的问题,即资源文件找不到的情况。例如,引用[3]提到将.properties文件放在resources目录下,并用ResourceBundle.getBundle加载,但依然找不到。引用[4]则强调配置文件的路径正确性,以及文件名匹配的问题,还提到不能有空格或双引号,且不需要写后缀名。引用[5]提到勾选Tomcat运行时可能解决。 接下来,我需要整理这些信息,并结合常见的资源文件处理步骤,给出解决方案。可能的步骤包括: 1. 检查文件位置:确保classInfo.properties位于正确的位置。在Maven项目中,通常放在src/main/resources目录下,并且编译后会出现在类路径的根目录中。如果使用其他结构,可能需要调整位置。 2. 文件名和路径的正确性:ResourceBundle.getBundle的参数应该是不带后缀的文件名,比如“classInfo”而不是“classInfo.properties”。同时检查是否有拼写错误,比如大小写是否匹配,因为有些系统对文件名大小写敏感。 3. 检查IDE配置:比如IntelliJ IDEA是否将resources目录标记为资源根目录,这样编译时才会包含进去。有时候需要右键目录,选择“Mark Directory as” -> “Resources Root”。 4. 文件编码和格式:确保.properties文件是UTF-8编码,特别是包含非ASCII字符时。同时检查文件内容是否有语法错误,比如未转义的特殊字符,或者键值对格式不正确。 5. 清理和重建项目:有时候IDE缓存可能导致旧文件未被替换,清理项目并重新构建可以解决这个问题。 6. 检查类加载器:在运行时确认资源文件是否在类路径中,可以通过ClassLoader.getResource("classInfo.properties")来验证是否能找到文件。如果返回null,说明路径有问题。 7. 检查依赖管理:如果是Maven或Gradle项目,确认资源文件是否被正确包含在构建配置中。例如,Maven的pom.xml中是否有<resources>配置。 8. 运行时环境配置:如引用[5]提到的,可能需要检查项目是否配置了正确的Targeted Runtime,比如Tomcat,确保依赖的库或配置文件被正确加载。 另外,用户可能在代码中使用类似ResourceBundle.getBundle("classInfo"),这时候需要注意路径是否正确。例如,如果文件在包内,可能需要使用全限定名如"com/example/classInfo"。 还需要考虑是否在测试环境中,比如单元测试可能需要将文件放在src/test/resources目录下,或者在测试配置中正确指定资源路径。 总结可能的解决方案步骤,并参考引用中的建议,比如文件位置、名称匹配、IDE配置、清理项目等。需要逐步引导用户检查每一个可能性,确保每个环节都正确无误。</think>要解决`java.util.MissingResourceException: Can't find bundle for base name classInfo.properties`问题,需检查以下环节: ### 1. **确认资源文件位置** - **标准Maven项目**:将`classInfo.properties`放在`src/main/resources`目录下,编译后文件会出现在类路径根目录。若文件需按包结构存放,需在`resources`下创建对应包路径,例如`com/example`[^4][^3]。 - **非Maven项目**:确保文件位于类路径根目录(如`WEB-INF/classes`或IDEA的`out/production/<项目名>`目录)。 ### 2. **验证文件名与调用方式** - **文件名规范**:检查文件名是否完全匹配(包括大小写),例如`classInfo.properties`而非`ClassInfo.properties`。 - **加载代码**:调用`ResourceBundle.getBundle("classInfo")`时**省略后缀**,且路径不应包含`.properties`[^3]。 ```java // 正确方式 ResourceBundle bundle = ResourceBundle.getBundle("classInfo"); // 错误示例(包含后缀或路径错误) ResourceBundle bundle = ResourceBundle.getBundle("classInfo.properties"); ``` ### 3. **IDE配置检查** - **标记资源目录**:在IntelliJ IDEA中右键`resources`文件夹,选择`Mark Directory as -> Resources Root`,确保IDE将其识别为资源目录。 - **清理缓存**:执行`File -> Invalidate Caches / Restart`,清除旧编译缓存。 ### 4. **文件内容与编码** - **UTF-8编码**:避免中文乱码问题,通过IDEA右下角设置文件编码为UTF-8(需确认`File -> Settings -> Editor -> File Encodings`中的配置)。 - **语法检查**:确保文件内容为`key=value`格式,无多余空格或未转义字符,例如: ```properties # 正确示例 db.url=jdbc:mysql://localhost:3306/test # 错误示例(等号两侧有空格) db.url = jdbc:mysql://localhost:3306/test ``` ### 5. **验证类路径是否包含文件** 通过代码检查文件是否存在: ```java // 在代码中添加调试语句 URL resource = getClass().getClassLoader().getResource("classInfo.properties"); System.out.println("Resource Path: " + (resource != null ? resource.getPath() : "Not Found")); ``` 若输出`Not Found`,说明文件未正确部署到类路径中[^4]。 ### 6. **构建工具配置(Maven/Gradle)** - **Maven**:在`pom.xml`中确认资源包含配置: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> </build> ``` - **Gradle**:在`build.gradle`中设置: ```groovy sourceSets { main { resources.srcDirs = ['src/main/resources'] } } ``` ### 7. **检查运行时环境** - **服务器配置**:若部署到Tomcat等服务器,确认`classInfo.properties`已打包到WAR文件的`WEB-INF/classes`目录中[^5]。 - **依赖冲突**:使用`mvn dependency:tree`或Gradle依赖树检查是否有其他库覆盖了资源文件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值