- PR -

JAVA言語の作法について

投稿者投稿内容
Kensaku
常連さん
会議室デビュー日: 2003/02/16
投稿数: 22
投稿日時: 2005-09-22 11:58
ファイル操作と切り出し作業を分けてみました。

コード:
public void extractFile() throws IOException {
    FileReader fileReader = null;
    try {
        fileReader = new FileReader(inputFileName);
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter(outputFileName);
            extract(fileReader, fileWriter);
        } finally {
            if (fileWriter != null) {
                fileWriter.close();
            }
        }
    } finally {
        if (fileReader != null) {
            fileReader.close();
        }
    }

}

private void extract(Reader reader, Writer writer)
        throws IOException {
    BufferedReader bufferedReader = new BufferedReader(reader);
    BufferedWriter bufferedWriter = new BufferedWriter(writer);
    PrintWriter printWriter = new PrintWriter(bufferedWriter);
    boolean isToWrite = false;//書き出すべきか?
    String line;
    while ((line = bufferedReader.readLine()) != null) {//EOFまで読み込み
        if (isToWrite) {//書き込みモードか?
            printWriter.println(line);
            if (p2.matcher(line).find()) {//終了文字列にマッチ
                isToWrite = false;
            }
            continue;
        }
        if (p1.matcher(line).find()) {//開始文字列にマッチ
            printWriter.println(line);
            isToWrite = true;
        }
    }
    printWriter.flush();
}

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-22 12:13
こんにちは、じゃんぬ です。

引用:

masaさんの書き込み (2005-09-21 23:03) より:

CodeComplete という本の存在は初めて知ったのですが、ネット上の評判を見る限り
かなりの名著のようですね。出版された時期は少々昔のようですが、今読んでみても
時代遅れではない内容でしょうか?


時代遅れだなんて、トンでもないですよw
どの言語にも通用するコンストラクションな部分ですからね。

と、偉そうに言ってますが、実は私も読んでから名著だということを知りました。
(実は、GDNJ というコミュニティの 投稿アワード で頂いたんです)
それまでは、本なんて全然読まなかったのですが、ハマりましたよ。
これは胸を張ってお勧めします。

# 私も脱線すいません。(*_ _)


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-09-22 12:35
こんにちは。

ちいにぃ さん、じゃんぬ さん、ありがとうございます。
かなーり読み応えがありそうな内容ですね。
早速購入してみます^^
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-09-22 13:08
引用:

Kensakuさんの書き込み (2005-09-22 11:58) より:
ファイル操作と切り出し作業を分けてみました。



間違ってるという訳ではありません、が、ちと質問!
なんで分けてみました?

# Exceptionが発生した時にログに吐き出してくれると良さそうですね〜。
Kensaku
常連さん
会議室デビュー日: 2003/02/16
投稿数: 22
投稿日時: 2005-09-22 19:08
こんばんは、さるさん。

引用:

さるさんの書き込み (2005-09-22 13:08) より:
引用:

Kensakuさんの書き込み (2005-09-22 11:58) より:
ファイル操作と切り出し作業を分けてみました。



間違ってるという訳ではありません、が、ちと質問!
なんで分けてみました?

# Exceptionが発生した時にログに吐き出してくれると良さそうですね〜。


ファイルからストリームを生成する機能と
ストリームを操作して切り出しをする機能が
本来別々の機能だと思ったからです。

ストリームを操作して切り出しをする機能に抽象化したので
例えば extractNet() のような機能追加もしやすいと思います。

もっと抽象化を進めたいならば extract メソッドの引数を
InputStream,OutputStream にするといいかもしれません。
文字エンコーディングの切り替えが追加しやすくなります。

Exceptionが発生した時にログに吐き出す処理は extractFile()
を呼び出すメソッドの方で行った方がいいと思いましたので
含めませんでした。
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-09-22 19:20
引用:

Kensakuさんの書き込み (2005-09-22 19:08) より:
ストリームを操作して切り出しをする機能に抽象化したので
例えば extractNet() のような機能追加もしやすいと思います。



extractNet() のような機能追加する時は現状のソースに処理を追加します?
それともFiletestクラスをextendsしますか?
extendsした時はどういったクラス名になるんでしょうねぇ〜。
どんなソースになるんでしょうねぇ〜。

スキルアップ/キャリアアップ(JOB@IT)