面试中关于Resource Bundle 加载Properties的问题

本文介绍了7种在Java中加载.properties文件的方法,包括使用Properties类的load()方法、ResourceBundle类的getBundle()方法等,并提供了具体的代码示例。

今天面试关于Resource Bundle 的问题,竟然没有答上来,惭愧,现将答案贴出如下:

1、使用java.util.Properties类的load()方法 示例:

Java代码

 

InputStream in = lnew BufferedInputStream(new FileInputStream(name));  
Properties p = new Properties();  
p.load(in);

 

2、使用java.util.ResourceBundle类的getBundle()方法
示例:

Java代码

 

 

 

ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

 

用ResourceBundle读取.properties文件可避免路径问题
我在jar里读取.properties文件时,总是找不到文件路径,后来用ResourceBundle读取.properties文件即可避免路径问题,代码如下:


//process为文件名,切记不要加 .properties, URL是文件里的键名

Java代码
ResourceBundle bundle = ResourceBundle.getBundle("com.ihandy.smsoc.app.process");      
String s = bundle.getString("URL");   
System.out.println(s);   
pURL = s;

 




3、使用java.util.PropertyResourceBundle类的构造函数
示例:

Java代码
InputStream in = new BufferedInputStream(new FileInputStream(name));  
ResourceBundle rb = new PropertyResourceBundle(in);
 



4、使用class变量的getResourceAsStream()方法
示例:

Java代码

 

InputStream in = 类名.class.getResourceAsStream(name);
Properties p = new Properties();  
p.load(in);

 
5、使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法 示例:

Java代码

 

InputStream in = 类名.class.getClassLoader().getResourceAsStream(name);  
Properties p = new Properties();  
p.load(in);

 

6、使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法 示例:

Java代码

 

InputStream in = ClassLoader.getSystemResourceAsStream(name);  
Properties p = new Properties();  
p.load(in);

 

7、Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法 示例:

Java代码
InputStream in = context.getResourceAsStream(path);    
Properties p = new Properties();    
p.load(in);   
 

 

在开发环境中找不到创建 Resource Bundle项时,可以通过手动配置文件和代码来实现 Resource Bundle 的功能。Resource Bundle 通常用于多语言支持或资源管理,在 Android 开发中可以利用 `resources` 文件夹下的 `values-xx` 目录及其对应的 XML 文件来定义不同语言环境的字符串资源。 如果 IDE 中没有直接提供创建 Resource Bundle 的图形化项,则可以按照以下方法操作: 1. **手动创建资源目录** 在 `res` 文件夹下创建特定语言的资源目录,例如: - `values-en`(英语) - `values-zh`(中文) - `values-fr`(法语) 2. **添加字符串资源文件** 每个语言目录下都需要一个 `strings.xml` 文件,其中包含该语言的字符串定义。例如,在 `values-en/strings.xml` 中: ```xml <resources> <string name="app_name">My Application</string> <string name="welcome_message">Welcome to our app!</string> </resources> ``` 而在 `values-zh/strings.xml` 中: ```xml <resources> <string name="app_name">我的应用</string> <string name="welcome_message">欢迎使用我们的应用!</string> </resources> ``` 3. **引用资源** 在 Java/Kotlin 代码中,可以通过 `getString(R.string.welcome_message)` 来获取当前语言环境下的字符串资源。 4. **动态切换语言(可)** 如果需要允许用户在运行时切换语言,可以在代码中设置 `Locale` 并重新启动 Activity 或更新 UI: ```kotlin val locale = Locale("zh") Locale.setDefault(locale) val config = Configuration() config.locale = locale resources.updateConfiguration(config, resources.displayMetrics) // 重启 Activity 或刷新 UI ``` 5. **构建自定义 Resource Bundle(非标准方式)** 若希望采用更灵活的方式管理资源(如 JSON 格式),可以将资源文件放入 `assets` 文件夹,并通过 `AssetManager` 读取并解析。例如: ```kotlin val inputStream = context.assets.open("zh.json") val buffer = ByteArray(inputStream.available()) inputStream.read(buffer) val json = String(buffer, Charsets.UTF_8) // 解析 JSON 并使用其中的语言数据 ``` 这种方式绕过了 IDE 提供的某些自动化工具,但仍然能够有效实现多语言支持和资源管理的功能[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值