程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java讀取properties設置裝備擺設文件的辦法

java讀取properties設置裝備擺設文件的辦法

編輯:關於JAVA

java讀取properties設置裝備擺設文件的辦法。本站提示廣大學習愛好者:(java讀取properties設置裝備擺設文件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是java讀取properties設置裝備擺設文件的辦法正文


本文實例講述了java讀取properties設置裝備擺設文件的辦法。分享給年夜家供年夜家參考。詳細剖析以下:

這兩天做java項目,用到屬性文件,到網上查材料,好半天也沒有找到一個滿足的辦法能讓我讀取到.properties文件中屬性值,很是愁悶,網上講的獲得屬性值年夜概有以下辦法,以下三種辦法逐步優化,以到達最好的後果以下都以date.properties文件為例,該文件放在src目次下,文件內容為:

startdate=2011-02-07
totalweek=25

辦法一:

public class Stweek {
 static private String startdate = null;
 static private String totalweek = null;
 synchronized static public void loads(){
  if(startdate == null || totalweek == null)
  {
   FileInputStream is = null;
   Properties dbProps = new Properties();
   try {
    is = new FileInputStream(filepath); 
    dbProps.load(is);
    startdate = dbProps.getProperty("startdate");
    totalweek = dbProps.getProperty("totalweek");
   }
   catch (Exception e) {
    System.err.println("不克不及讀取屬性文件. " +
    "請確保db.properties在CLASSPATH指定的途徑中");
   }
  }
 }
 public static String getStartdate() {
  if(tartdate==null)
   loads();
   return startdate;
 }
 public static String getTotalweek() {
  if(startdate==null)
   loads();
   return totalweek;
 }
}

以上辦法固然也能取得設置裝備擺設文件內容,可是其最年夜的成績就是文件途徑的定位(就是代碼中的filepath取值成績),當采取相對定位的時刻,假如將工程移到別的一個盤符下運轉,就須要修正源代碼,不然就會報錯,可是假如應用絕對途徑,當Stweek 類移到別的一個包中時,照樣要修正源代碼,不然會報錯,所以說這個辦法局限太年夜,欠好,以下辦法二能處理這個成績,可是其照樣有些成績

辦法二:

public class Stweek {
 InputStream is = null;
 Properties dbProps = null;
 public Stweek() {
  // TODO Auto-generated constructor stub
  is = getClass().getResourceAsStream("/date.properties");
  dbProps = new Properties();
  try {
   dbProps.load(is);
  }
  catch (Exception e) {
   System.err.println("不克不及讀取屬性文件. " +
   "請確保db.properties在CLASSPATH指定的途徑中");
  }
 }
 public String getStartdate()
 {
  String sd = null;
  sd = dbProps.getProperty("startdate");
  return sd;
 }
 public String getTotalweek()
 {
  String totalweek=null;
  totalweek = dbProps.getProperty("totalweek");
  return totalweek;
 }
}

這個辦法的利益就是不消指出設置裝備擺設文件的相對途徑,並且不論是將Stweek 類放到別的的包中,照樣將全部工程移到到別的的盤符下,代碼仍然可以正常運轉,不會有找不到文件的成績,可是這個辦法依然有一個嚴重的缺點,由於我們常常願望設置裝備擺設文件可以或許緩存在內存中,如許不消每次讀取時都要拜訪硬盤(拜訪外存太糟蹋時光),為此我們願望應用靜態變量、靜態辦法來緩存和取得變量,同時可以或許完成這些值的靜態加載(load),那末成績來了,由於getClass().getResourceAsStream("/date.properties"); 這一句只能湧現在結構函數中(同鞋可以本身測試一下),靜態load中其實不能應用這個辦法,怎樣辦呢,且看第三個辦法

辦法三:

import java.io.InputStream;
import java.util.Properties;
public class Stweek {
 static private String startdate = null;
 static private String totalweek = null;
 static{
  loads();
 }
 synchronized static public void loads(){
  if(startdate == null || totalweek == null)
  {
   InputStream is = Stweek.class.getResourceAsStream("/date.properties");
   Properties dbProps = new Properties();
   try {
    dbProps.load(is);
    startdate = dbProps.getProperty("startdate");
    totalweek = dbProps.getProperty("totalweek");
   }
   catch (Exception e) {
    System.err.println("不克不及讀取屬性文件. " +
    "請確保db.properties在CLASSPATH指定的途徑中");
   }
  }
 }
 public static String getStartdate() {
 if(startdate==null)
  loads();
  return startdate;
 }
 public static String getTotalweek() {
 if(startdate==null)
 loads();
 return totalweek;
 }
}

這個辦法不只可以或許緩存設置裝備擺設文件內容,還可以或許做到主動加載設置裝備擺設文件的內容到內存,應用者完整不消斟酌手動加載的進程,只須要在須要用到的處所直接挪用Stweek.getStartdate()便可(由於是靜態辦法,事前連對像也不消創立的),如許假如內存中有緩存,函數就會直接讀取內存中的數據,節儉時光,假如沒有緩存也不消擔憂,體系會主動為你加載,應用者完整不消曉得其是若何完成的,只須要曉得我能直接挪用函數取得想要的值就好了,呵呵,簡略吧
備注:(與上文有關,本身的測試)

願望本文所述對年夜家的java法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved