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 + ")" );
}
}
戻る