PropertyManager

戻る


$ ./PropertyManager.sh ../../etc/IS.properties
*** DEBUG *** in PropertyManager.getInstance() : PropertyManagerがインスタンス化されました!
*** DEBUG *** in PropertyManager.getInstance() : ../../etc/IS.properties の内容を読み取っています
--- prop1 ---
encoding = JISAutoDetect
--- prop2 ---
defaultConnectTimeout = 3000
--- prop3 ---
isSameHost = null
--- prop4 ---
seekSameHost = false


$ ./PropertyManager.sh ../../etc/IS.properties123
*** DEBUG *** in PropertyManager.getInstance() : PropertyManagerがインスタンス化されました!
*** DEBUG *** in PropertyManager.getInstance() : ../../etc/IS.properties123 の内容を読み取っています
IntelligentSpider.PropertyManagerLoadException: (プロパティファイル: ../../etc/IS.properties123 が見つかりません!)
        at IntelligentSpider.PropertyManager.load(PropertyManager.java:41)
        at IntelligentSpider.PropertyManager.getInstance(PropertyManager.java:65)
        at IntelligentSpider.PropertyManager.main(PropertyManager.java:82)




#
#	$Id: PropertyManager.html,v 1.1 2009/06/22 16:11:52 kishi Exp kishi $
#
#  	プロパティの値の後ろにスペースが入っていると正常にパースできないので注意!

# 読み込むサイトの文字エンコーディング -- UTF8 または JISAutoDetect

IS.encoding = JISAutoDetect
#IS.encoding = UTF8

# キャッシュを使うかどうかの設定
IS.setUseCaches = true

# コネクションタイムアウトの設定
IS.defaultConnectTimeout = 3000

# リードタイムアウトの設定
IS.defaultReadTimeout = 10000

# ユーザーエージェント
IS.userAgent = IntelligentSpider_VER1.0

# 同一ホストものだけ探索するか ( [true|false] ) -- 現時点ではtrueが望ましい
IS.seekSameHost = false

# 自分の存在するPATHより上位のものは取り込まない ( [true|false] )  -- 自分のディレクトリ以下のみ
# 								   ※isSamaHostがfalseの場合は、意味をなさない
IS.noParent = false

#######################################################################################################################
### サーバ側からのレスポンスで指定されたリダイレクト先に追従するか ( [true|false] )
### Locationヘッダで飛ばされたURLがさらにLocationヘッダで先に飛ばす場合に
### followRedirectsの属性だけでは対応できないので自前で作ることにする
#######################################################################################################################
IS.followRedirects = false

# 走査するURLを正規表現によりフィルタリングするための設定
IS.acceptFlag = false
IS.acceptableURLPattern = html

IS.rejectFlag = true
IS.rejectableURLPattern = .+\.(gif|jpg|png|css)$


package IntelligentSpider; import java.util.*; import java.io.*; /** <pre> $Id: PropertyManager.html,v 1.1 2009/06/22 16:11:52 kishi Exp kishi $ 複数のプロパティ情報を別々に管理するクラス 基本的にシングルトンである </pre> @author KISHI Yasuhiro */ public class PropertyManager { /** インスタンス */ static private PropertyManager uniqInstance; /** ホストごとに格納されたプロパティのマップ */ static private HashMap propertiesSet; private PropertyManager() { /* コンストラクタ */ propertiesSet = new HashMap(); } /** プロパティファイルの内容をロードする @param propFileName プロパティファイル名 */ private static void load( String propFileName ) throws PropertyManagerLoadException, Exception { try { Properties properties = new Properties(); // プロパティファイルからキーと値のリストを読み込みます properties.load( new FileInputStream( propFileName ) ); propertiesSet.put( propFileName, properties ); } catch ( java.io.FileNotFoundException e ) { throw new PropertyManagerLoadException( "プロパティファイル: " + propFileName + " が見つかりません!" ); } catch ( Exception e ) { throw( e ); } } /** インスタンスを取得 @param propFileName プロパティファイル名 */ public static synchronized Properties getInstance( String propFileName ) throws Exception { /* 他のスレッドで呼び出す可能性があるので、synchronized修飾子を付けて、排他制御する */ try { if ( uniqInstance == null ) { // 初めて呼ばれたときだけインスタンス化 uniqInstance = new PropertyManager(); System.err.println( "*** DEBUG *** in PropertyManager.getInstance() : PropertyManagerがインスタンス化されました!" ); } if ( !propertiesSet.containsKey( propFileName ) && propertiesSet.get( propFileName ) == null ) { System.err.println( "*** DEBUG *** in PropertyManager.getInstance() : " + propFileName + " の内容を読み取っています" ); // プロパティファイルの中身を読み込む load( propFileName ); } else { /* DO NOTHIING */ } return ( Properties ) propertiesSet.get( propFileName ); } catch ( Exception e ) { throw( e ); } } /** 単体テスト用のメインメソッド */ static public void main( String[] args ) { String propFileName = args[ 0 ]; try { Properties prop1 = PropertyManager.getInstance( propFileName ); Properties prop2 = PropertyManager.getInstance( propFileName ); Properties prop3 = PropertyManager.getInstance( propFileName ); System.out.println( "--- prop1 ---" ); System.out.println( "encoding = " + prop1.getProperty( "IS.encoding" ) ); System.out.println( "--- prop2 ---" ); System.out.println( "defaultConnectTimeout = " + prop2.getProperty( "IS.defaultConnectTimeout" ) ); System.out.println( "--- prop3 ---" ); System.out.println( "isSameHost = " + prop3.getProperty( "IS.isSameHost" ) ); System.out.println( "--- prop4 ---" ); System.out.println( "seekSameHost = " + prop3.getProperty( "IS.seekSameHost" ) ); } catch ( Exception e ) { e.printStackTrace(); } } } #!/bin/sh # $Id: PropertyManager.html,v 1.1 2009/06/22 16:11:52 kishi Exp kishi $ if [ $# != 1 ] ; then echo "Usage: $0 [propFileName]" exit 1 fi PROP=$1 java -cp ../../lib/IntelligentSpider.jar IntelligentSpider.PropertyManager ${PROP} package IntelligentSpider; /** $Id: PropertyManager.html,v 1.1 2009/06/22 16:11:52 kishi Exp kishi $ @author KISHI Yasuhiro */ public class PropertyManagerLoadException extends Exception { public PropertyManagerLoadException( String errmsg ) { super( "(" + errmsg + ")" ); } }
戻る inserted by FC2 system