JAVA读取属性文件的几种方法

简介:

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());

3.使用java.util.PropertyResourceBundle类的构造函数
示例:Java代码
InputStream in = new BufferedInputStream(new FileInputStream(name));
ResourceBundle rb = new PropertyResourceBundle(in);

4.使用class变量的getResourceAsStream()方法
示例:ava代码
InputStream in = JProperties.class.getResourceAsStream(name);
Properties p = new Properties();
p.load(in);

5.使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法
示例:Java代码
InputStream in = JProperties.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.使用apache的PropertiesConfiguration类
示例:Java代码
Configuration config = new PropertiesConfiguration("test.properties");
config.getProperty(key);
补充Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法

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

    其中name为properties文件名字.但我在网上发现有人说要写properties文件的绝对路径,否则测试   不 能通过.我没验证过,有兴趣的朋友可以试试.
    
  就我个人而言我是比较偏向用第3方法.我在网上找到一篇介绍的更为详细的文章,全文如下:在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class,.config保存此类信息并不适合,这时我们需要ResourceBundle。通过ResourceBundle,我们需要访问位于/WEB-INF/classes目录下的一个后缀名为properties的文本类型文件,从里面读取我们需要的值。

Java代码
Locale locale = Locale.getDefault();

ResourceBundle localResource = ResourceBundle.getBundle("ConnResource", locale);   

String value = localResource.getString("test");   
System.out.println("ResourceBundle: " + value);  
这里对应了/WEB-INF/class/ConnResource.properties文件内容为:
test=hello world
打印出来的结果就是hello world  
请注意,这里我们可以利用Locale和ResourceBundle的这个组合创建国际化的java程序。我们可以把locale实例化为

Java代码
new Locale("zh","CN");

通过

Java代码
ResourceBundle.getBundle("MessagesBundle", locale);

系统将自动寻找MessagesBundle_zh_CN,即定义为中国大陆地区简体中文。如果没有该文件,则会依次寻找MessagesBundle_zh,MessagesBundle,直到找到为止。

/**

  • 写入properties信息
  • @param filePath 绝对路径(包括文件名和后缀名)
  • @param parameterName 名称
  • @param parameterValue 值
    */

public static void writeProperties(String filePath,String parameterName,String parameterValue) {
Properties props = new Properties();
try {
//如果文件不存在,创建一个新的
File file=new File(filePath);
if(!file.exists()){
ToolKit.writeLog(Setting.class.getName(), "sharedata.properties 文件不存在,创建一个新的!"); file.createNewFile(); }
InputStream fis = new FileInputStream(filePath);
// 从输入流中读取属性列表(键和元素对)
props.load(fis);
fis.close();
OutputStream fos = new FileOutputStream(filePath);
props.setProperty(parameterName, parameterValue);
// 以适合使用 load 方法加载到 Properties 表中的格式,
// 将此 Properties 表中的属性列表(键和元素对)写入输出流
props.store(fos, parameterName);
fos.close(); // 关闭流 }
catch (IOException e) {
System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");
writeLog(This.class.getName(), "Visit "+filePath+" for updating "+parameterName+" value error", e); }
}

[代码] java读取属性(相对路径)
/* filename: 相对路径+文件名(不要后缀) */
public synchronized static String getPropertyFromFile(String filename, String key) {
ResourceBundle rb = ResourceBundle.getBundle(filename);
return rb.getString(key).trim(); }

/*

  • @Title: readValue
  • @Description: TODO 通过绝对路径获取properties文件属性, 根据key读取value
  • @param filePath properties文件绝对路径(包括文件名和后缀)
  • @param key 属性key
  • @return String 返回value
    */

public static String readValue(String filePath, String key){
Properties props = new Properties();
InputStream in=null;
try{
in = new BufferedInputStream(new FileInputStream(filePath));
props.load(in);
String value = props.getProperty(key);
return value; }
catch(Exception e){
e.printStackTrace();
return null;
}finally{
try {
in.close();//-----------------------------------important
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

/**

  • 本类主要是对config。properties的密码进行修改
  • @param args
    */

public static void main(String[] args) {
// TODO Auto-generated method stub
//写文件 String passwork = “123”;
//更改src的config包下的config.properties文件中的“userPassword”属性的值
writeProperties("config/config.properties","userPassword",passwork);
//config.properties一定要写完整
//从文件中取出userPassword,
String decStr=getPropertyFromFile("config/config", "userPassword");
System.out.println("============"+ decStr); }

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class ParsePropertyFile {

public HashMap<String, String> getProperty(String propertyFile) {
    HashMap<String, String> hm = null;
    try {
        Properties props = new Properties();
        InputStream is = new FileInputStream(
                new File(propertyFile).getAbsolutePath());
        props.load(is);
        Set<Object> keys = props.keySet();
        hm = new HashMap<String, String>();
        for (Iterator<Object> it = keys.iterator(); it.hasNext();) {
            String key = (String) it.next();
            hm.put(key, props.getProperty(key));                            
        }
        is.close();    

    } catch (IOException ie) {

    }
    return hm;
}

}

相关文章
|
19天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
25天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
64 9
|
26天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
65 2
|
5天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
61 34
|
10天前
|
JSON 前端开发 JavaScript
Java属性为什么不能是is开头的boolean
在Java实体类中,阿里规约要求boolean属性不应以is开头。文章通过实际案例分析了isUpdate字段在JSON序列化过程中变为update的问题,并提供了自定义get方法或使用@JSONField注解两种解决方案,建议遵循规约避免此类问题。
Java属性为什么不能是is开头的boolean
|
17天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
30 4
|
17天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
22 4
|
15天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
21 1
|
22天前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
38 3
|
25天前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。