Java で、設定ファイルから値を読み込む方法

Java で設定ファイル (Attribute = Value の形式) を用意して、その設定ファイルに書いた属性の値を読み込むには、Class#getResourceAsStream(String s) メソッドを使う。以下、定義ファイルに host=10.0.0.1、port=8080 と書いてあるものを、Client#init() メソッドの中で処理する例である。ひな型として以下の 3つのファイル (Client.java、ClientImpl.java、Client.properties) は 3点セットとし自分のパターンとして持っておきたい。 Client.properties ファイルの内容 (以下の 2行)
host=10.0.0.1
port=8080
Client.java ファイルの内容
public interface Client {

    public static final String PROPERTY_FILE = "Client.properties";
    public static final String HOST = "host";
    public static final String PORT = "port";

    public void init();
}
ClientImpl.java ファイルの内容
import java.io.InputStream;
import java.util.Properties;

public class ClientImpl implements Client {

    public static String DEFAULT_HOST = "192.168.0.1";
    public static int    DEFAULT_PORT = 1024;

    public static void main(String[] args) {

        Client client = new ClientImpl();
        client.init();
    }

    public void init() {

        this.getProperties();

System.out.println("host: " + DEFAULT_HOST);
System.out.println("port: " + DEFAULT_PORT);
    }

    protected void getProperties() {

        try {

            InputStream is = getClass().getResourceAsStream(Client.PROPERTY_FILE);
            Properties p = new Properties();
            p.load(is);

            if (p != null) {

                // Read a host address
                String host = p.getProperty(Client.HOST);
                if (host != null)
                    DEFAULT_HOST = host;

                // Read a port
                String port = p.getProperty(Client.PORT);
                if (port != null)
                    DEFAULT_PORT = Integer.parseInt(port);

            }
        } catch (Exception e) {
            System.out.println("File not found: " + Client.PROPERTY_FILE
                    + ".  Ignored the error.");
        }
    }
}
コンパイル方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> javac *.java
実行方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> java ClientImpl
Java で設定ファイル (Attribute = Value の形式) を用意して、その設定ファイルに書いた属性の値を読み込むには、Class#getResourceAsStream(String s) メソッドを使う。以下、定義ファイルに host=10.0.0.1、port=8080 と書いてあるものを、Client#init() メソッドの中で処理する例である。ひな型として以下の 3つのファイル (Client.java、ClientImpl.java、Client.properties) は 3点セットとし自分のパターンとして持っておきたい。 Client.properties ファイルの内容 (以下の 2行)
host=10.0.0.1
port=8080
Client.java ファイルの内容
public interface Client {

    public static final String PROPERTY_FILE = "Client.properties";
    public static final String HOST = "host";
    public static final String PORT = "port";

    public void init();
}
ClientImpl.java ファイルの内容
import java.io.InputStream;
import java.util.Properties;

public class ClientImpl implements Client {

    public static String DEFAULT_HOST = "192.168.0.1";
    public static int    DEFAULT_PORT = 1024;

    public static void main(String[] args) {

        Client client = new ClientImpl();
        client.init();
    }

    public void init() {

        this.getProperties();

System.out.println("host: " + DEFAULT_HOST);
System.out.println("port: " + DEFAULT_PORT);
    }

    protected void getProperties() {

        try {

            InputStream is = getClass().getResourceAsStream(Client.PROPERTY_FILE);
            Properties p = new Properties();
            p.load(is);

            if (p != null) {

                // Read a host address
                String host = p.getProperty(Client.HOST);
                if (host != null)
                    DEFAULT_HOST = host;

                // Read a port
                String port = p.getProperty(Client.PORT);
                if (port != null)
                    DEFAULT_PORT = Integer.parseInt(port);

            }
        } catch (Exception e) {
            System.out.println("File not found: " + Client.PROPERTY_FILE
                    + ".  Ignored the error.");
        }
    }
}
コンパイル方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> javac *.java
実行方法 (コンソール (Windows の場合はコマンドプロンプト) より)
> java ClientImpl
Posted on 2005-12-23 by yas |

Java で、サイトにアクセスして HTML を取得する方法

Perl だとほんの数行で書けてしまうことが Java だと結構かかる (C だともっとかかる)。以下は STR_URL で指定した URL の内容 (HTML) を取ってきてコンソールに表示する例。何をしているかはコメントをご覧ください。
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStreamReader;
import java.io.BufferedReader;

...

// アクセスする URL を文字列に設定する。
String STR_URL = "https://perltips.twinkle.cc/";

// URLを作成する。
URL url = new java.net.URL(STR_URL);

// 接続を取得する (接続は new して作るのではなく、openConnection メソッドで取得する)。
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET"); // ←ここは任意。なくても良い

// リーダーを読んでHTTPレスポンスを取得する。
// ただし,リクエストした先のURLが画像などの場合は、InputStreamでバイト列として扱う。
// 文字エンコーディングは「JISAutoDetect」で自動検出させる。
InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "JISAutoDetect");
BufferedReader br = new java.io.BufferedReader(isr);

// 受信したストリームを表示
String line = null;
while (null != (line = br.readLine())) {
    System.out.println(line);
}

// ストリームならびに接続をクローズ
br.close();
conn.disconnect();

...
Perl だとほんの数行で書けてしまうことが Java だと結構かかる (C だともっとかかる)。以下は STR_URL で指定した URL の内容 (HTML) を取ってきてコンソールに表示する例。何をしているかはコメントをご覧ください。
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.InputStreamReader;
import java.io.BufferedReader;

...

// アクセスする URL を文字列に設定する。
String STR_URL = "https://perltips.twinkle.cc/";

// URLを作成する。
URL url = new java.net.URL(STR_URL);

// 接続を取得する (接続は new して作るのではなく、openConnection メソッドで取得する)。
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET"); // ←ここは任意。なくても良い

// リーダーを読んでHTTPレスポンスを取得する。
// ただし,リクエストした先のURLが画像などの場合は、InputStreamでバイト列として扱う。
// 文字エンコーディングは「JISAutoDetect」で自動検出させる。
InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "JISAutoDetect");
BufferedReader br = new java.io.BufferedReader(isr);

// 受信したストリームを表示
String line = null;
while (null != (line = br.readLine())) {
    System.out.println(line);
}

// ストリームならびに接続をクローズ
br.close();
conn.disconnect();

...
Posted on 2005-12-20 by yas |

PHP で、サイトにアクセスして HTML を取得する方法

PHP の場合は、fopen 関数の引数に URL を指定すればその URL にある HTML をオープンすることができる。後は while でファイルポインタの最後 (EOF: End of File) まで読み出してあげればよい。
<?php

// アクセスする URL を指定
$URL = 'https://perltips.twinkle.cc/';

// URL をオープン
$fp = fopen($URL, 'r');

// HTML を読み出す
while (! feof($fp)) {

    print
fread($fp, 1024) or die("READ");
}

// HTML のクローズ
fclose($fp) or die("CLOSE"); 

?>
PHP の場合は、fopen 関数の引数に URL を指定すればその URL にある HTML をオープンすることができる。後は while でファイルポインタの最後 (EOF: End of File) まで読み出してあげればよい。
<?php

// アクセスする URL を指定
$URL = 'https://perltips.twinkle.cc/';

// URL をオープン
$fp = fopen($URL, 'r');

// HTML を読み出す
while (! feof($fp)) {

    print
fread($fp, 1024) or die("READ");
}

// HTML のクローズ
fclose($fp) or die("CLOSE"); 

?>
Posted on 2005-12-17 by yas |

Perl で、サイトにアクセスして HTML を取得する方法

LWP (libwww-perl という形で配布されている) を使う。LWP::Agent モジュールは、ウェブクライアント、ウェブオートメーション (ソフトウェアやプログラムが自動的にサイトにアクセスして情報を取ってくること) といったものの基本である。もうはるか彼方、何年も前からある技術なのに基本は変わっていないのがポイント。以下のスクリプトは、$URL で指定されているサイトにアクセスして、成功すればその HTML のコードをコンソールに表示、失敗したときはエラーコードを出力する例。CGI として機能させたときは、ブラウザには HTML コードでなく $URL でアクセスしたページを表示する。つまりプロキシとして動作するということ。 シンプルなバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;

my $req = HTTP::Request->new('GET' => $URL); # HTTP リクエストを作成
my $res = $proxy->request($req); # $res に HTTP レスポンスが返ってくる

print $res->content; # HTML を表示

1;
ちょっと長いバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;
$proxy->agent('your own created browser name here'); # 任意
$proxy->timeout(60); # 任意

my $req = HTTP::Request->new('GET' => $URL);
my $res = $proxy->request($req);
my $content = $res->content;

print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる)
if($res->is_success) {
    print $content;
} else {
    print 'HTTP エラーコード: ' . $res->code;
}

1;
LWP (libwww-perl という形で配布されている) を使う。LWP::Agent モジュールは、ウェブクライアント、ウェブオートメーション (ソフトウェアやプログラムが自動的にサイトにアクセスして情報を取ってくること) といったものの基本である。もうはるか彼方、何年も前からある技術なのに基本は変わっていないのがポイント。以下のスクリプトは、$URL で指定されているサイトにアクセスして、成功すればその HTML のコードをコンソールに表示、失敗したときはエラーコードを出力する例。CGI として機能させたときは、ブラウザには HTML コードでなく $URL でアクセスしたページを表示する。つまりプロキシとして動作するということ。 シンプルなバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;

my $req = HTTP::Request->new('GET' => $URL); # HTTP リクエストを作成
my $res = $proxy->request($req); # $res に HTTP レスポンスが返ってくる

print $res->content; # HTML を表示

1;
ちょっと長いバージョン
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

our $URL = 'https://perltips.twinkle.cc/'; # アクセスする URL

my $proxy = new LWP::UserAgent;
$proxy->agent('your own created browser name here'); # 任意
$proxy->timeout(60); # 任意

my $req = HTTP::Request->new('GET' => $URL);
my $res = $proxy->request($req);
my $content = $res->content;

print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる)
if($res->is_success) {
    print $content;
} else {
    print 'HTTP エラーコード: ' . $res->code;
}

1;