Java讀取properties配置文件

  1 import java.io.BufferedReader;
  2 import java.io.IOException;
  3 import java.io.InputStream;
  4 import java.io.InputStreamReader;
  5 import java.io.UnsupportedEncodingException;
  6 import java.util.Enumeration;
  7 import java.util.Iterator;
  8 import java.util.Properties;
  9 import java.util.Set;
 10 
 11 import javax.servlet.ServletContext;
 12 import javax.servlet.ServletException;
 13 import javax.servlet.annotation.WebServlet;
 14 import javax.servlet.http.HttpServlet;
 15 
 16 @WebServlet(urlPatterns={"/PropertiesServlet"},loadOnStartup=1)
 17 public class PropertiesServlet extends HttpServlet {
 18     
 19     private static final long serialVersionUID = 1L;
 20     
 21     public PropertiesServlet() {
 22         super();
 23     }
 24     
 25     public void init()throws ServletException{  
 26         
 27         // 獲取 ServletContext
 28         ServletContext context = this.getServletContext();
 29         // 獲取 ServletConfig
 30         //ServletConfig servletConfig = this.getServletConfig();
 31         
 32         // 獲取全部初始化參數的名稱
 33         Enumeration<String> enumer = context.getInitParameterNames();
 34         //Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();// 一樣是獲取全部初始化參數的名稱
 35         //enumer = initParameterNames;
 36         
 37         while (enumer.hasMoreElements()) {
 38             String name = enumer.nextElement();
 39             String value = context.getInitParameter(name);// 經過參數名獲取參數值
 40             System.out.println(name + ":" + value);
 41         }
 42         
 43         
 44         // 經過 ServletContext 獲取資源文件輸入流 InputStream 的三種方式
 45         //URL url = context.getResource("WEB-INF/classes/jdbc.properties");
 46         //InputStream is1 = url.openStream();
 47         
 48         //String path = context.getRealPath("WEB-INF/classes/jdbc.properties");
 49         //File file = new File(path);
 50         //InputStream is2 = new FileInputStream(file);
 51         
 52         InputStream is3 = context.getResourceAsStream("WEB-INF/classes/jdbc.properties");//方便
 53         
 54         // 獲取 ClassLoader 的三種方式
 55         //ClassLoader classLoader1 = this.getClass().getClassLoader();
 56         //ClassLoader classLoader2 = Thread.currentThread().getContextClassLoader();
 57         //ClassLoader classLoader3 = ClassLoader.getSystemClassLoader();
 58         
 59         // 經過 ClassLoader 獲取 InputStream
 60         //InputStream is = classLoader3.getResourceAsStream("jdbc.properties");
 61         
 62         //InputStream is4 = ClassLoader.getSystemResourceAsStream("jdbc.properties");//方便
 63         
 64         Properties prop = new Properties();
 65         
 66         //Java在網絡傳輸中使用的編碼是"ISO-8859-1",若是配置文件有中文,可能出現亂碼問題
 67         //解決方案:1.native2ascii.exe將中文轉成Unicode編碼;2.將InputStream封裝成Reader
 68         //InputStream字節流沒法讀取中文,把InputStream轉換成Reader字符流,將字節解碼爲字符來讀取中文
 69         InputStreamReader isr = null;
 70         try {
 71             isr = new InputStreamReader(is3, "UTF-8");
 72         } catch (UnsupportedEncodingException e) {
 73             e.printStackTrace();
 74         }
 75         //其中UTF-8,用於明確指定解碼字符流的字符集
 76         //不指定則默認使用OS的,這會形成同一份配置文件同一份代碼,在linux和windows上、英文windows和中文windows之間的表現都不一致
 77         //這個參數應該和具體讀取的properties文件的編碼格式匹配
 78         
 79         
 80         //建議用 BufferedReader 包裝全部其 read() 操做可能開銷很高的 Reader(如 FileReader 和 InputStreamReader)
 81         //若是不緩衝的話會經過read方法一次又一次的訪問文件
 82         BufferedReader bf = new BufferedReader(isr);
 83         
 84         //將內容讀到 Properties 裏
 85         try {
 86             prop.load(bf);
 87         } catch (IOException e) {
 88             // TODO Auto-generated catch block
 89             e.printStackTrace();
 90         }
 91         
 92         String user = prop.getProperty("姓名");
 93         System.out.println(user);
 94         
 95         // 獲取全部Property 的 Name
 96         Set<String> set = prop.stringPropertyNames();
 97         Iterator<String> it = set.iterator();
 98         while (it.hasNext()) {
 99             String name = it.next();
100             String value = prop.getProperty(name);// 經過name獲取value
101             System.out.println(name + ":" + value);
102         }
103     }
104 }
相關文章
相關標籤/搜索