java加載properties文件的六種基本方式

package com.test.modul.utils;  
  
import java.io.BufferedInputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStream;  
import java.util.Locale;  
import java.util.Properties;  
import java.util.PropertyResourceBundle;  
import java.util.ResourceBundle;  
  
/** 
 * 加載properties文件的方式 
 * 
 * @author 
 * 
 */  
public class LoadPropertiesFileUtil {  
  
    private static String basePath = "src/main/java/com/test/modul/utils/prop.properties";  
    private static String path = "";  
  
    /** 
     * 1、 使用java.util.Properties類的load(InputStream in)方法加載properties文件 
     * 
     * @return 
     */  
    public static String getPath1() {  
  
        try {  
            InputStream in = new BufferedInputStream(new FileInputStream(  
                    new File(basePath)));  
            Properties prop = new Properties();  
  
            prop.load(in);  
  
            path = prop.getProperty("path");  
  
        } catch (FileNotFoundException e) {  
            System.out.println("properties文件路徑書寫有誤,請檢查!");  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
  
        return path;  
    }  
  
    /** 
     * 2、 使用java.util.ResourceBundle類的getBundle()方法 
     * 注意:這個getBundle()方法的參數只能寫成包路徑+properties文件名,不然將拋異常 
     * 
     * @return 
     */  
    public static String getPath2() {  
        ResourceBundle rb = ResourceBundle  
                .getBundle("com/test/modul/utils/prop");  
        path = rb.getString("path");  
        return path;  
    }  
  
    /** 
     * 3、 使用java.util.PropertyResourceBundle類的構造函數 
     * 
     * @return 
     */  
    public static String getPath3() {  
        InputStream in;  
        try {  
            in = new BufferedInputStream(new FileInputStream(basePath));  
            ResourceBundle rb = new PropertyResourceBundle(in);  
            path = rb.getString("path");  
        } catch (FileNotFoundException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return path;  
    }  
  
    /** 
     * 4、 使用class變量的getResourceAsStream()方法 
     * 注意:getResourceAsStream()方法的參數按格式寫到包路徑+properties文件名+.後綴 
     * 
     * @return 
     */  
    public static String getPath4() {  
        InputStream in = LoadPropertiesFileUtil.class  
                .getResourceAsStream("/com/test/modul/utils/prop.properties");  
        Properties p = new Properties();  
        try {  
            p.load(in);  
            path = p.getProperty("path");  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return path;  
    }  
  
    /** 
     * 5、 
     * 使用class.getClassLoader()所獲得的java.lang.ClassLoader的getResourceAsStream()方法 
     * getResourceAsStream(name)方法的參數必須是包路徑+文件名+.後綴 
     * 不然會報空指針異常 
     * @return 
     */  
    public static String getPath5() {  
        InputStream in = LoadPropertiesFileUtil.class.getClassLoader()  
                .getResourceAsStream("com/test/modul/utils/prop.properties");  
        Properties p = new Properties();  
        try {  
            p.load(in);  
            path = p.getProperty("path");  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return path;  
    }  
  
    /** 
     * 6、 使用java.lang.ClassLoader類的getSystemResourceAsStream()靜態方法 
     * getSystemResourceAsStream()方法的參數格式也是有固定要求的 
     * 
     * @return 
     */  
    public static String getPath6() {  
        InputStream in = ClassLoader  
                .getSystemResourceAsStream("com/test/modul/utils/prop.properties");  
        Properties p = new Properties();  
        try {  
            p.load(in);  
            path = p.getProperty("path");  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return path;  
    }  
  
    public static void main(String[] args) {  
        System.out.println(LoadPropertiesFileUtil.getPath1());  
        System.out.println(LoadPropertiesFileUtil.getPath2());  
        System.out.println(LoadPropertiesFileUtil.getPath3());  
        System.out.println(LoadPropertiesFileUtil.getPath4());  
        System.out.println(LoadPropertiesFileUtil.getPath5());  
        System.out.println(LoadPropertiesFileUtil.getPath6());  
    }  
}
其中第1、4、5、六種方式都是先得到文件的輸入流,
而後經過Properties類的load(InputStream inStream)方法
加載到Properties對象中,最後經過Properties對象來操做文件內容;
第2、三中方式是經過ResourceBundle類來加載Properties文件,
而後ResourceBundle對象來操作properties文件內容。
其中最重要的就是每種方式加載文件時,文件的路徑須要按照方法的定義的格式來加載,
不然會拋出各類異常,好比空指針異常。
相關文章
相關標籤/搜索