技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

java:WEBからHTMLファイルを取得するサンプルプログラム

行きつけのサイトのログ(HTMLファイル)を定期的に取得しているのですが、その時に使用しているサンプルプログラムを公開します。
Javaの実行環境が整っているWindowsOSで、LogGet.java と LogGet.bat を同じディレクトリに置き、LogGet.bat を実行すると、「html」フォルダが出来上がりそこにHTMLファイルが格納されます。
取得するHTMLファイルのURL、及びHTMLファイルのローカルでのファイル名は、LogGet.java を修正して変更します。
HTMLファイルの文字コードは「EUC-JP」を前提としていますので、他の文字コードが使用されている場合は LogGet.java の「EUC-JP」の箇所を適宜修正してください。
 
【サンプルコード】
・LogGet.java
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
 
public class LogGet {
 
    public static void main(final String[ ] args){
        /*  利用者がいじる所はここです。
         *   ・"~.html"となっている箇所は取得ログのファイル名です。
         *    適宜書き換えてください。
         *     ※ファイル名が被った場合はログを取得しません
         *   ・取得する必要が無いログはコメントアウトしてください。
         */
        //LogGet("ログ1","http://hoge.html","ほげ.html");
          LogGet("ログ2","http://fuga.html","ふが.html");
    }
   
    public static void LogGet(String logName, String logUrl, String fileName){
        File f = new File("html\\" + fileName);
        if(f.exists()){
            System.out.println
                ("重複したファイル名 " + fileName + " が与えられたため " +
                 logName + " は取得しません。");
            return;
        }
        URL url = null;
        InputStream is = null;
        InputStreamReader isr = null;
        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        try {
            url = new URL(logUrl);
            is = url.openStream();
            isr = new InputStreamReader(is,"EUC-JP");
            fos = new FileOutputStream("html\\" + fileName);
            osw = new OutputStreamWriter(fos,"EUC-JP");
            while(true) {
                int i = isr.read();
                if (i == -1) {
                    break;
                }
                osw.write( (char)i);
            }
            System.out.println
                (logName + " をファイル名 " + fileName + " で取得しました。");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                isr.close();
                is.close();
                osw.close();
                fos.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
}
 
・LogGet.bat
@echo off
rem JDKをインストールしていない場合はインストールしてください。
rem https://qiita.com/ko2a/items/69fa8a5366d7449500ca

rem 都度コンパイルを実施(javaスクリプト言語っぽく利用)
if exist .\LogGet.class (del .\LogGet.class)
javac -encoding UTF-8 .\LogGet.java

rem 処理実行
if not exist html\ (mkdir html)
java -classpath . LogGet

rem 処理終了
del .\LogGet.class
pause
exit