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文件內容。 其中最重要的就是每種方式加載文件時,文件的路徑須要按照方法的定義的格式來加載, 不然會拋出各類異常,好比空指針異常。