英語辞書
仕様書が一段落したのでブログ充
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も使ったことがなかったのでとても勉強になりました
やっぱりブログは毎日書きたいなー