取得した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); } } }