ほぷしぃ

Java言語入門 〜C言語を学んだ君へ〜

[第18回]演習問題V 第3問解答

第3問解答

FileIOクラス

18演習問題3解答1

Ex18_03クラス

18演習問題3解答2

第3問解説

主に、ファイル入出力とマルチスレッドの理解度を確認する問題です。
内容はそれほど難しくありません。
また、この問題では、プログラムの作成方法に「マルチスレッドによる入出力を行うこと」以外の条件は指定していません。
つまり、条件を満たし、実行結果が正しく出力できれば、正解となります。
そのため、今回の答えはあくまで「一例」と考えてください。
では、次にプログラムの解説をします。

FileIOクラスの解説

まずは、FileIOクラスです。
このクラスは指定した入力ストリームから出力ストリームへ、1行ずつ書き込みを行います。
以下に詳しく解説します。

1行目

入出力クラスを使うため、インポートを行います。

3行目

Threadクラスを継承します。
これにより、スレッドによる処理が行えます。

4行目

このクラスで一つのみ存在するオブジェクトを作成します。
後で解説しますが、このオブジェクトを使って、「排他制御」を行います。

8〜11行目

コンストラクタです。
入出力ストリームを受け取り、メンバ変数を初期化します。

13行目

runメソッドの開始です。
このメソッドより、スレッドが開始されるため、ここに入出力の処理を記述していきます。

14行目

入出力を行うには、例外処理が必要になります。
そのため、try〜catchで例外を受け取ります。

15〜21行目

入力と出力を繰り返し行います。
ただし、ここで「synchronized」を使います。
これは、排他制御をおこなうためのキーワードで、読み書きを同時に行うことを禁止しています。
そして、この排他制御を実現するためにオブジェクトobjを使います。
これは、このクラスに1つしか存在しないため、このクラスをいくつ作成しても、排他制御が行われます。

Ex18_03クラスの解説

続いて、Ex18_03クラスです。
このクラスはFileIOを使って、2つのファイルから1行ずつ読み込み1つのファイルに書き込みを行います。
以下に詳しく解説します。

1行目

ファイル入出力クラスを使うため、インポートします。

6〜8行目

入出力ストリームを作成します。
入力ファイルは2つ作成し、出力ファイルは1つのみです。

10〜11行目

クラスFileIOを作成します。

12〜13行目

読み書きを開始します。
startメソッドより、スレッドが開始します。

15〜16行目

二つのスレッドが終了するまで待ちます。

18〜20行目

入出力ストリームを閉じます。



第3問-問題へ ページのトップへ おしまい