JSP開發中properties文件的使用

一:介紹: properties文件在java開發中使用的比較多,主要是一些配置不但願在程序中寫死,而採用 properties文件這樣在不一樣的地方使用只須要修改properties文件而不用修改程序,最日常的 是使用在數據庫配置中或信息配置中,在開發多語言版本的時候也頗有用處,你不一樣的語言版本 使用不一樣的配置文件,這樣你就能夠不修改程序也不用在程序中在判斷,只須要把文件放在 不一樣的地方就可使用。java

二:準備 使用properties文件你須要使用java.util.ResourceBundle充分了解,同時你須要把properties 文件放在classpath中,這樣系統啓動是才能加載文件。程序員

三:加載properties文件 ResourceBundle msgBundle=ResourceBundle.getBundle(msgResource,Locale.CHINA); 使用上面的語句你就能夠加載properties文件文件了,但你必須保證properties 文件放 在classpath中。 同時請參考Java API java.util.ResourceBundle;web

四:使用properties 如今你須要取到properties文件中的內容,使用ResourceBundle裏面的getString() 方法就能夠了。 但須要注意的是getString取到的是ISO字符串,你可能根據須要轉換爲不一樣的字符串。sql

五:具體實現 jdbc.properties

jdbc.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=EVA_MEMBER
jdbc.username=sa
jdbc.password=sa數據庫

MessageBundle.java

import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;服務器

public class MessageBundle {jsp

private static ResourceBundle msgBundle = null;  

  
public MessageBundle(String msgResource) {  
    msgBundle = ResourceBundle.getBundle(msgResource, Locale.CHINA);  
}  

  
public static String getMessage(String _key) {  
    String message = null;  
    try {  
        message = new String(msgBundle.getString(_key)  
                .getBytes("ISO8859_1"), "gb2312");  
    } catch (MissingResourceException ex) {  
        ex.printStackTrace();  
    } catch (UnsupportedEncodingException ex) {  
        ex.printStackTrace();  
    }  
    return message;  
}  
  
public static void main(String[] args) {  
      

     MessageBundle msg=new MessageBundle("jdbc");  
     String driver   = msg.getMessage("jdbc.driverClassName");  
     String url      = msg.getMessage("jdbc.url");  
     String username =msg.getMessage("jdbc.username");  
     String password =msg.getMessage("jdbc.password");  

     System.out.println(driver);  
     System.out.println(url);  
     System.out.println(username);  
     System.out.println(password);  
      
      
}

} 六:具體運用 1:)鏈接數據庫 在jsp開發中一般鏈接數據庫都是由JavaBean去實現,但你由不但願下次使用這個javabean 去修改.這時候properties文件就頗有做用了。你能夠把數據庫配置放在properties文件中。 這樣就能夠只修改properties而繼續使用JavaBean了。 2網頁風格 建設一個網站一般是須要統一的風格,也就覺得着須要統一的背景色等等,這個時候你把 網頁風格涉及的要素放在peoperties文件中,須要修改一次性修改幾能夠了,或者下次還 有大概相同的網站是否是能夠省修改頁面的時間啊。 3:)信息提示 在開發一個Appaction中出錯提示或者信息提示是必須的,而不少時候你的提示信息,用戶 未必能理解,一開始你又不知道如何用戶能夠理解,這個時候把全部的提示信息放在 properties文件中是一個不錯的提示。 4:)和系統有關的屬性 由於java是能夠在不一樣的平臺上運行的,而不少時候開發和實際運行是在不一樣的平臺,這個函數

時候你就可使用properties文件保存系統屬性,移植也能夠省一些時間。sqlserver

轉:http://qqwyy.iteye.com/blog/197858

Java讀取Properties文件的六種方法網站

1.使用java.util.Properties類的load()方法

  示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name));

  Properties p = new Properties();

  p.load(in);

  2。使用java.util.ResourceBundle類的getBundle()方法

  示例: ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

  3。使用java.util.PropertyResourceBundle類的構造函數

  示例: InputStream in = new BufferedInputStream(new FileInputStream(name));

  ResourceBundle rb = new PropertyResourceBundle(in);

  4。使用class變量的getResourceAsStream()方法

  示例: InputStream in = JProperties.class.getResourceAsStream(name);

  Properties p = new Properties();

  p.load(in);

  5。使用class.getClassLoader()所獲得的java.lang.ClassLoader的getResourceAsStream()方法

  示例: InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);

  Properties p = new Properties();

  p.load(in);

  6。使用java.lang.ClassLoader類的getSystemResourceAsStream()靜態方法

  示例: InputStream in = ClassLoader.getSystemResourceAsStream(name);

  Properties p = new Properties();

  p.load(in);

  補充

  Servlet中可使用javax.servlet.ServletContext的getResourceAsStream()方法

  示例:InputStream in = context.getResourceAsStream(path);

  Properties p = new Properties();

  p.load(in);

  JProperties.java文件

  public class JProperties {

  public final static int BY_PROPERTIES = 1;

  public final static int BY_RESOURCEBUNDLE = 2;

  public final static int BY_PROPERTYRESOURCEBUNDLE = 3;

  public final static int BY_CLASS = 4;

  public final static int BY_CLASSLOADER = 5;

  public final static int BY_SYSTEM_CLASSLOADER = 6;

  public final static Properties loadProperties(final String name, final int type) throws IOException {

  Properties p = new Properties();

  InputStream in = null;

  if (type == BY_PROPERTIES) {

  in = new BufferedInputStream(new FileInputStream(name));

  assert (in != null);

  p.load(in);

  } else if (type == BY_RESOURCEBUNDLE) {

  ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

  assert (rb != null);

  p = new ResourceBundleAdapter(rb);

  } else if (type == BY_PROPERTYRESOURCEBUNDLE) {

  in = new BufferedInputStream(new FileInputStream(name));

  assert (in != null);

  ResourceBundle rb = new PropertyResourceBundle(in);

  p = new ResourceBundleAdapter(rb);

  } else if (type == BY_CLASS) {

  assert (JProperties.class.equals(new JProperties().getClass()));

  in = JProperties.class.getResourceAsStream(name);

  assert (in != null);

  p.load(in);

  // return new JProperties().getClass().getResourceAsStream(name);

  } else if (type == BY_CLASSLOADER) {

  assert (JProperties.class.getClassLoader().equals(new JProperties().getClass().getClassLoader()));

  in = JProperties.class.getClassLoader().getResourceAsStream(name);

  assert (in != null);

  p.load(in);

  // return new JProperties().getClass().getClassLoader().getResourceAsStream(name);

  } else if (type == BY_SYSTEM_CLASSLOADER) {

  in = ClassLoader.getSystemResourceAsStream(name);

  assert (in != null);

  p.load(in);

  }

  if (in != null) {

  in.close();

  }

  return p;

  }

  // ---------------------------------------------- servlet used

  // ---------------------------------------------- support class

  public static class ResourceBundleAdapter extends Properties {

  public ResourceBundleAdapter(ResourceBundle rb) {

  assert (rb instanceof java.util.PropertyResourceBundle);

  this.rb = rb;

  java.util.Enumeration e = rb.getKeys();

  while (e.hasMoreElements()) {

  Object o = e.nextElement();

  this.put(o, rb.getObject((String) o));

  }

  }

  private ResourceBundle rb = null;

  public ResourceBundle getBundle(String baseName) {

  return ResourceBundle.getBundle(baseName);

  }

  public ResourceBundle getBundle(String baseName, Locale locale) {

  return ResourceBundle.getBundle(baseName, locale);

  }

  public ResourceBundle getBundle(String baseName, Locale locale, ClassLoader loader) {

  return ResourceBundle.getBundle(baseName, locale, loader);

  }

在咱們平時寫程序的時候,有些參數是常常改變的,而這種改變不是咱們預知的。好比說咱們開發了一個操做數據庫的模塊,在開發的時候咱們鏈接本地的數據庫那麼 IP ,數據庫名稱,表名稱,數據庫主機等信息是咱們本地的,要使得這個操做數據的模塊具備通用性,那麼以上信息就不能寫死在程序裏。一般咱們的作法是用配置文件來解決。

各類語言都有本身所支持的配置文件類型。好比 Python ,他支持 .ini 文件。由於他內部有一個 ConfigParser 類來支持 .ini 文件的讀寫,根據該類提供的方法程序員能夠自由的來操做 .ini 文件。而在 Java 中, Java 支持的是 .properties 文件的讀寫。JDK 內置的 java.util.Properties 類爲咱們操做 .properties 文件提供了便利。

一. .properties 文件的形式 ==========================================================

如下爲服務器、數據庫信息

dbPort = localhost

databaseName = mydb

dbUserName = root

dbPassword = root

如下爲數據庫表信息

dbTable = mytable

如下爲服務器信息

ip = 192.168.0.9

······

在上面的文件中咱們假設該文件名爲: test.properties 文件。其中 # 開始的一行爲註釋信息;在等號「 = 」左邊的咱們稱之爲key ;等號「 = 」右邊的咱們稱之爲 value 。(其實就是咱們常說的鍵 - 值對) key 應該是咱們程序中的變量。而 value 是咱們根據實際狀況配置的。 二. JDK 中的 Properties 類 Properties 類存在於胞 Java.util 中,該類繼承自 Hashtable ,它提供了幾個主要的方法: 1. getProperty ( String key) , 用指定的鍵在此屬性列表中搜索屬性。也就是經過參數 key ,獲得 key 所對應的 value 。

2. load ( InputStream inStream) ,從輸入流中讀取屬性列表(鍵和元素對)。經過對指定的文件(好比說上面的 test.properties 文件)進行裝載來獲取該文件中的全部鍵 - 值對。以供 getProperty ( String key) 來搜索。 3. setProperty ( String key, String value) ,調用 Hashtable 的方法 put 。他經過調用基類的put方法來設置 鍵 - 值對。

4. store ( OutputStream out, String comments) , 以適合使用 load 方法加載到 Properties 表中的格式,將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流。與 load 方法相反,該方法將鍵 - 值對寫入到指定的文件中去。

5. clear ()

,清除全部裝載的 鍵 - 值對。該方法在基類中提供。

有了以上幾個方法咱們就能夠對 .properties 文件進行操做了!

簡單實例:

Java代碼 收藏代碼 package cn.net.yans.common.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**

  • 讀取properties文件
  • @author yans

*/
public class Configuration {
private Properties propertie;
private FileInputStream inputFile;
private FileOutputStream outputFile;

/** 
 * 初始化Configuration類 
 */  
public Configuration() {  
    propertie = new Properties();  
}  

/** 
 * 初始化Configuration類 
 *  
 * @param filePath 
 *            要讀取的配置文件的路徑+名稱 
 */  
public Configuration(String filePath) {  
    propertie = new Properties();  
    try {  
        inputFile = new FileInputStream(this.getClass().getClassLoader()  
                .getResource(filePath).getPath());  
        propertie.load(inputFile);  
        inputFile.close();  
    } catch (FileNotFoundException ex) {  
        System.out.println("讀取屬性文件--->失敗!- 緣由:文件路徑錯誤或者文件不存在");  
        ex.printStackTrace();  
    } catch (IOException ex) {  
        System.out.println("裝載文件--->失敗!");  
        ex.printStackTrace();  
    }  
}// end ReadConfigInfo(...)  

/** 
 * 重載函數,獲得key的值 
 *  
 * @param key 
 *            取得其值的鍵 
 * @return key的值 
 */  
public String getValue(String key) {  
    if (propertie.containsKey(key)) {  
        String value = propertie.getProperty(key);// 獲得某一屬性的值  
        return value;  
    } else  
        return "";  
}// end getValue(...)  

/** 
 * 重載函數,獲得key的值 
 *  
 * @param fileName 
 *            properties文件的路徑+文件名 
 * @param key 
 *            取得其值的鍵 
 * @return key的值 
 */  
public String getValue(String fileName, String key) {  
    try {  
        String value = "";  
        inputFile = new FileInputStream(fileName);  
        propertie.load(inputFile);  
        inputFile.close();  
        if (propertie.containsKey(key)) {  
            value = propertie.getProperty(key);  
            return value;  
        } else  
            return value;  
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
        return "";  
    } catch (IOException e) {  
        e.printStackTrace();  
        return "";  
    } catch (Exception ex) {  
        ex.printStackTrace();  
        return "";  
    }  
}// end getValue(...)  

/** 
 * 清除properties文件中全部的key和其值 
 */  
public void clear() {  
    propertie.clear();  
}// end clear();  

/** 
 * 改變或添加一個key的值,當key存在於properties文件中時該key的值被value所代替, 當key不存在時,該key的值是value 
 *  
 * @param key 
 *            要存入的鍵 
 * @param value 
 *            要存入的值 
 */  
public void setValue(String key, String value) {  
    propertie.setProperty(key, value);  
}// end setValue(...)  

/** 
 * 將更改後的文件數據存入指定的文件中,該文件能夠事先不存在。 
 *  
 * @param fileName 
 *            文件路徑+文件名稱 
 * @param description 
 *            對該文件的描述 
 */  
public void saveFile(String fileName, String description) {  
    try {  
        outputFile = new FileOutputStream(fileName);  
        propertie.store(outputFile, description);  
        outputFile.close();  
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    } catch (IOException ioe) {  
        ioe.printStackTrace();  
    }  
}// end saveFile(...)  

public static void main(String[] args) throws IOException {  
    Configuration rc = new Configuration("powers.properties");  
    String[] powerList = rc.getValue("list").split(",");  
    for (String po : powerList) {  
        System.out.println(po);  
    }  
}

}

路徑相關問題:

在java中使用相對路徑   無標題文檔   ?   在開發過程當中,咱們常常會遇到讀取配置文件的狀況,對於配置文件的讀取,根據環境等狀況又各有不一樣,通常狀況下,若是從非jar包中使用相對/路徑,比較簡單,就不在累述了,而在不少   狀況下,咱們須要把咱們的class打包成jar文件,進行使用,這時就會發現,咱們先前若是沒有考慮到這些,可能就行不通了,那麼,該如何解決呢?方法以下   :   有以下路徑 :   Web-info--|-->classes--->conf-->config.properties   |-->lib   此時加入咱們須要讀取config.properties,在不使用jar包時,使用以下方式讀取,不失爲一種方法:   File f = new File(this.getClass().getResource("/").getPath());   f = new File(f.getPath() + "/conf/config.properties");

或者:(this.getClass().getClassLoader().getResource(fileName).getPath())

  注:f.getPath()即爲當class所在的絕對路徑。如:c:\javasrc\web-inf\classes   而後,對文件對象進行處理,就能把配置信息讀取出來了,可是加入如上class被打包成jar文件,那麼,在程序執行到這裏時,就會沒法找到配置文件,那麼該如何處理呢?   處理方法以下:   String s_config="conf/config.properties";   InputStream in = ClassLoader.getSystemResourceAsStream(s_config);   if( in == null ){   System.out.println( " 打開 " + s_config + "失敗!" );   }else   {   Properties properties = new Properties();   properties.load(in);   //   //接下來就能夠經過properties.getProperty(String obj)方法對進行配置信息讀取了

  1. System.getProperty ("user.dir" )當前用戶目錄的相對路徑。

  2. this.getClass().getResource("") 到的也是當前ClassPath 的絕對URI 路徑。

  3. ClassLoader.getSystemResource("") 到的也是當前ClassPath 的絕對URI 路徑。

  4. Thread.currentThread().getContextClassLoader().getResource("") 到的也是當前ClassPath 的絕對URI 路徑。

讀取Properties 文件的方法

  1. 使用java.util.Properties 類的load() 方法 示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name)); Properties p = new Properties(); p.load(in);

  2. 使用java.util.ResourceBundle 類的getBundle() 方法 示例: ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

  3. 使用java.util.PropertyResourceBundle 類的構造函數 示例: InputStream in = new BufferedInputStream(new FileInputStream(name)); ResourceBundle rb = new PropertyResourceBundle(in);

  4. 使用class 變量的getResourceAsStream() 方法 示例: InputStream in = JProperties.class.getResourceAsStream(name); Properties p = new Properties(); p.load(in);

  5. 使用class.getClassLoader() 所獲得的java.lang.ClassLoader 的getResourceAsStream() 方法。

示例:

InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in);

  1. 使用java.lang.ClassLoader 類的getSystemResourceAsStream() 靜態方法 示例: InputStream in = ClassLoader.getSystemResourceAsStream(name); Properties p = new Properties(); p.load(in);

7.Servlet 中可使用javax.servlet.ServletContext 的getResourceAsStream() 方法 示例: InputStream in = context.getResourceAsStream(path); Properties p = new Properties();

p.load(in);

空格

//得到文件路徑,並對路徑進行處理 private static String getUrl() { String path = configLoad.class.getResource("config.properties").toString(); path = path.replace("%20", " "); //引號中有一個半角的空格 path = path.substring(6); return path; } } 那麼這裏返回了一個Properties類型的值,在這裏就可使用getProperty()來得到值 如:Properties pro = configLoad.getConfig(); String http = pro.getProperty("url").toString();

總 結:java的properties文件須要放到classpath下面,這樣程序才能讀取到,有關classpath實際上就是java類或者庫的存放 路徑,在java工程中,properties放到class文件一塊。在web應用中,最簡單的方法是放到web應用的WEB-INF/classes 目錄下便可,也能夠放在其餘文件夾下面,這時候須要在設置classpath環境變量的時候,將這個文件夾路徑加到classpath變量中,這樣也也可 以讀取到。在此,你須要對classpath有個深入理解,classpath絕非系統中刻意設定的那個系統環境變量,WEB-INF/classes其 實也是,java工程的class文件目錄也是

相關文章
相關標籤/搜索