取得したWebページをディスクへ保存

archive という名前が恥ずかしいけれど,他に思いつかず,つい・・

import java.io.*;
import web.WebPage;

public class WebArchive {

    // 指定された URL のコンテンツを取得し,ファイルに保存する
    // prefix : 保存する際のディレクトリの前置文字列
    //          保存の際のファイル名は prefix/url となる.
    static void archive(String url, String prefix){	
	String filename;	//保存するファイル名

	System.err.println(url);
	//////////////////////////////////////////////////////////////

	//前置文字列の付与
	if(prefix != null){
	    filename = prefix + "/";
	} else {
	    filename = "";
	}
	//////////////////////////////////////////////////////////////

	// "http://" 直後の位置を見つけ,それ以降を暫定的な filename とする.
	int pos = url.indexOf("//") + 2;
	filename += url.substring(pos);

	// filename の最後の文字を調べて,'/' ならばファイル名が存在しないと
	// 判定し,"index.html" を付加する.
	char lastChar = filename.charAt(filename.length() - 1);
	//System.out.println(lastChar);
	if(lastChar == '/'){
	    filename = filename + "index.html";
	}

	// *.html の前までがディレクトリ名に該当するから,
	// getParent() により「ディレクトリ名に該当する部分」を取り出し,
	// 必要に応じてディレクトリを作る.
	File file = new File(filename);
	if(!file.exists()){
	    File dir = new File(file.getParent());
	    boolean status = dir.mkdirs();

	    //////////////////////////////////////////////////////////////
	    
	    // Web ページの取得
	    // 取得の際,スクリプトやタグを除去せず,オリジナルのまま取り込む.
	    WebPage wp = new WebPage(url);
	    String content = wp.getContent(false, false);
	    if(content == null){
		System.err.println("コンテンツ取得に失敗 : " + url);
		return;
	    }
	    
	    // Webページ(コンテンツ)のファイルへの書き出し
	    try {
		PrintWriter fout =
		    new PrintWriter(new BufferedWriter(new FileWriter(filename)));
		fout.print(content);
		fout.close();
	    } catch(Exception e){
		System.err.println(e);
	    }
	}

	return;
    }

    public static void main(String[] args){
	try {
	    BufferedReader fin =
		new BufferedReader(new FileReader("urllist.txt"));
	    String url;
	    while((url = fin.readLine()) != null){
		archive(url, "archive");
	    }
	    fin.close();
	} catch(Exception e){
	    System.err.println(e);
	}
    }
}