常见的properties文件读取

在实际开发中,对.properties文件的读取操作非常频繁
读取.properties文件的方式主要有两种:
【1 : 通过jdk提供的java.util.Properties类】
java.util.Properties类继承自java.util.HashTable,即实现了Map接口,所以,可使用相应的方法来操作属性文件,但不建议使用像put、putAll这 两个方法,因为put方法不仅允许存入String类型的value,还可以存入Object类型的。因此java.util.Properties类提 供了getProperty()和setProperty()方法来操作属性文件,同时使用store或save(已过时)来保存属性值(把属性值写 入.properties配置文件)。在使用之前,还需要加载属性文件,它提供了两个方法:load和loadFromXML。

1.通过当前类加载器的getResourceAsStream方法获取
    InputStream inStream = TestProperties.class.getClassLoader().getResourceAsStream("test.properties");  

2.从文件获取
    InputStream inStream = new FileInputStream(new File("filePath"));  

3.也是通过类加载器来获取,和第一种一样
    InputStream in = ClassLoader.getSystemResourceAsStream("filePath");  

4.在servlet中,还可以通过context来获取InputStream
    InputStream in = context.getResourceAsStream("filePath");  

5.通过URL来获取
    URL url = new URL("path");  
    InputStream inStream = url.openStream();  


读取流:
    Properties prop = new Properties();    
    prop.load(inStream);    
    String key = prop.getProperty("username");    
    //String key = (String) prop.get("username");  

【2 : 通过java.util.ResourceBundle类读取】
这种方式比使用Properties要方便一些。可以通过通过ResourceBundle.getBundle()静态方法来获取,也可以直接从InputStream中读取

1.通过ResourceBundle.getBundle()静态方法来获取
    ResourceBundle是一个抽象类,这种方式来获取properties属性文件不需要加.properties后缀名,只需要文件名即可。
    //test为属性文件名,放在包com.mmq下,如果是放在src下,直接用test即可    
    ResourceBundle resource = ResourceBundle.getBundle("com/mmq/test");
    String key = resource.getString("username");  

2.从InputStream中读取
     获取InputStream的方法和上面一样,不再赘述。
     ResourceBundle resource = new PropertyResourceBundle(inStream);  

注意:在使用中遇到的最大的问题可能是配置文件的路径问题,如果配置文件入在当前类所在的包下,那么需要使用包名限定, 如:test.properties入在com.mmq包下,则要使用com/mmq/test.properties(通过Properties来获 取)或com/mmq/test(通过ResourceBundle来获取);属性文件在src根目录下,则直接使用test.properties 或test即可。

【实例】

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
import java.util.ResourceBundle;

public class TestPro {
    
    public static final String FILE = "system.properties";

    public static void main(String[] args) throws IOException {
        //读取方式一:通过当前类加载器的getResourceAsStream方法获取
        //InputStream inStream = TestPro.class.getClassLoader().getResourceAsStream(FILE); 
        
        //读取方式二:从文件获取
        //InputStream inStream = new FileInputStream(new File("")); 
        
        //读取方式三:过类加载器来获取
        InputStream inStream = ClassLoader.getSystemResourceAsStream(FILE);  
        
        //读取方式四:在servlet中,还可以通过context来获取InputStream
        //InputStream in = context.getResourceAsStream("filePath"); 
        
        //读取方式五:
        //InputStream inStream=new URL("").openStream();
        
        
        Properties prop = new Properties();    
        prop.load(inStream);    
        String key = prop.getProperty("redis.port");
        System.out.println(key);
        
        //方式六:通过java.util.ResourceBundle类读取,这种方式来获取properties属性文件不需要加.properties后缀名
        ResourceBundle resource = ResourceBundle.getBundle("system");
        System.out.println(resource.getString("data.storage.root"));
    }
}

你可能感兴趣的:(常见的properties文件读取)