shokosブログ

プログラミング

英語辞書

仕様書が一段落したのでブログ充

t_43zさんからコメントをいただき
Yamashiroさんに説明してもらい

さっきのコードのリファクタリングをしてもらいました!

どうもありがとうございます!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class DiaryGetter {
	public static void main(String args[]) {
		BufferedReader reader = null;
		try {
			String certification = WSSE.getWsseHeaderValue("syoko_sasaki",
					"ぱすわーど");
			URL url = new URL(
					"http://d.hatena.ne.jp/syoko_sasaki/atom/blog/20090617/1245222305");
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.addRequestProperty("X-WSSE", certification);
			reader = new BufferedReader(new InputStreamReader(connection
					.getInputStream(), "utf-8"));

			String res = "";
			String line;
			while ((line = reader.readLine()) != null) {
				res += line;
			}

			String mainText = res
					.split("<hatena:syntax xmlns:hatena=\"http://www.hatena.ne.jp/info/xmlns#\">")[1]
					.split("</hatena:syntax>")[0];
			System.out.println(mainText);
		} catch (Exception e) {
			// なんしか復帰処理
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e) {
					// どうしようもないので無視
				}
			}
		}

	}
}


finally節は例外がcatchされようとされまいと関係なく
絶対に行われる処理を書く

例外が発生されると以後の処理は行われないまま、つまり
try節でreader.close();を書いても、その前で例外が発生されたら
実行されない



だからclose系はfinallyに書く!
でもでも

	} finally {
	        reader.close();
	}

って直接書くと、もしなにか例外が発生してreaderがnullのとき、ぬるぽになってしまう

nullなものnullで、閉じられないので

	} finally {
		if (reader != null) {
			try {
				reader.close();
			} catch (IOException e) {
				// どうしようもないので無視
			}
		}
	}

でreader != nullの条件をつけてあげます

nullでないのに閉じられない場合はもうどうしようもないので無視!

なんしか復帰処理の部分は、例えば指定したURLや文字コード
間違っていた場合の処理などを書くのだけど、省略します



今まであけたらしめるはおろか、finallyも使ったことがなかったのでとても勉強になりました

やっぱりブログは毎日書きたいなー