Java Propertiesクラスプロファイル情報の読み取りと変更

3527 ワード

私たちが普段プログラムを書くとき、いくつかのパラメータはよく変化しますが、このような変化は私たちが予知していません.例えば、私たちは操作データベースのモジュールを開発しました.開発時にローカルのデータベースに接続すると、IP、データベース名、テーブル名、データベースホストなどの情報がローカルになります.この操作データのモジュールに汎用性を持たせるには、情報をプログラムに書くことはできません.通常、プロファイルで解決します.各言語には、サポートされているプロファイルタイプがあります.例えばPython、彼は支持しています.iniファイル.彼の内部にはnfigParserクラスがあるからだ.iniファイルの読み書きは、このクラスが提供する方法に従ってプログラマーが自由に操作することができる.iniファイル.JavaではJavaがサポートする.propertiesファイルの読み書き.JDK内蔵java.util.Propertiesクラスは私たちのために操作します.propertiesファイルは便利です.
サーバ、データベース情報
dbPort = localhost
databaseName = mydb
dbUserName = root
dbPassword = root
#次はデータベーステーブル情報
dbTable = mytable
#以下はサーバ情報
ip = 192.168.0.9
······
上のファイルでは、ファイル名をtestと仮定します.propertiesファイル.#の最初の動作コメント情報;等号「=」の左側にある私たちはkeyと呼ばれています.等号「=」の右側の私たちはvalueと呼ばれています.(実は私たちがよく言うキー-値ペア)keyは私たちのプログラムの変数であるべきです.valueは実際の状況に基づいて構成されています
以下はpropertiesファイルを操作するツールクラスです.
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

/**
 * Java    Property  
 * @author xiewanzhi
 * @date 2011-4-7  09:19:03
 * @version 1.0
 */
public class PropertiesConfig {

	/**
	 *   KEY,        
	 * @param filePath     ,         ,  :java/util/config.properties
	 * @param key  
	 * @return key    
	 */
	public static String readData(String filePath, String key) {
		//      
		filePath = PropertiesConfig.class.getResource("/" + filePath).toString();
		//     ”file:“  
		filePath = filePath.substring(6);
		Properties props = new Properties();
		try {
			InputStream in = new BufferedInputStream(new FileInputStream(filePath));
			props.load(in);
			in.close();
			String value = props.getProperty(key);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 *            key  ,  ,   ,  。
	 * @param filePath     ,         ,  :java/util/config.properties
	 * @param key  
	 * @param value      
	 */
	public static void writeData(String filePath, String key, String value) {
		//      
		filePath = PropertiesConfig.class.getResource("/" + filePath).toString();
		//     ”file:/“  
		filePath = filePath.substring(6);
		Properties prop = new Properties();
		try {
			File file = new File(filePath);
			if (!file.exists())
				file.createNewFile();
			InputStream fis = new FileInputStream(file);
			prop.load(fis);
			//           fis
			fis.close();
			OutputStream fos = new FileOutputStream(filePath);
			prop.setProperty(key, value);
			//  ,     
			prop.store(fos, "Update '" + key + "' value");
			fos.close();
		} catch (IOException e) {
			System.err.println("Visit " + filePath + " for updating " + value + " value error");
		}
	}
	
	public static void main(String[] args) {
		System.out.println(PropertiesConfig.readData("com/xiewanzhi/property/config.properties", "port"));
//		PropertiesConfig.writeData("com/xiewanzhi/property/config.properties", "port", "12345");
	}
}