乱数の生成
JDKにおいて、乱数を生成するクラスは二つあります。 一つはjava.util.Randomクラス、もう一つはjava.lang.Mathクラスです。 実際に使用してその動作を見てみます。
このように、二つの違うクラス・メソッドを用いているにもかかわらず、同じ数値が得られます。 というのも、Mathクラスでは内部的にRandomクラスのインスタンスを生成し、それを用いているためです。 さらに、Randomクラスのインスタンスに対して同じシード値を与えられている場合、同じ乱数が生じます。 そのためこのような結果になります。
Mathクラスには0以上1未満のdouble値を返すrandom()メソッドしかありませんが、Randomクラスには様々なメソッドがあります。
Mathクラス
JDKのMathクラスのメンバのほとんどは、.NET FrameworkのMathクラスと大差ありません。 一部ですが、その使用例が次のコードです。
.NET FrameworkのMathクラスにないメソッドとして、toDegrees()メソッド及びtoRadians()メソッドがあります。 このメソッドは、度数で表された角度をラジアンに変換したり、その逆を行うためのメソッドです。
Fileクラス
java.io.Fileクラスは、.NET FrameworkにおけるFileクラス、Pathクラス、Directoryクラスの機能が一つになった様なクラスです。
このように、ファイルの生成・削除や、ファイル属性、絶対パスの取得など、様々な操作が行えます。 ここではパスにファイル名を指定したのでファイルに対する操作になりますが、ディレクトリ名を指定すればディレクトリに対して操作を行えます。
FileWriterクラスとFileReaderクラス
java.io.FileWriterクラスとjava.io.FileReaderクラスはファイルへの簡単な書き込み・読み込みを行うためのクラスです。
読み込み時のバッファサイズ0x100は適当な数値です。 しかし、length()メソッドなどでファイルのサイズを取得してから決定した方がいいのかもしれません。 ちなみに、使用されているエンコーディング名は「MS932」と出力されていますが、これはSHIFT-JISを表すものと思われます。
また、78〜79行目においてchar配列のバッファを文字列化する際に、バッファの余った部分には0で満たされているので、その部分までを有効なデータとして切り出しています。
BufferedWriterクラスとBufferedReaderクラス
java.io.BufferedWriterクラスとjava.io.BufferedReaderクラスはFileWriter・ FileReader同様、ファイルへの書き込み・読み込みを行うためのクラスですが、FileWriter・FileReaderとは異なり書き込み・読み込み時にバッファリングされます。
この例ではBufferedWriter及びBufferedReaderをインスタンス化する時に、FileWriterまたはFileReaderのインスタンスを作成し、それをラップします。 出力に際して、改行コードを出力するためにはnewLine()メソッドを呼び出す必要があります。
BufferedReaderでは一行単位の読込が行えます。 このときファイルの終端に達するとreadLine()メソッドはnullを返します。 67〜70行目ではnullが返されるまで読み取りを繰り返し、表示しています。
PrintWriterクラス
PrintWriterクラスでは、書き出したいデータを適切な表現にフォーマットして出力します。
この例でもBufferedWriter同様、インスタンス化する際にFileWriterのインスタンスを作成して、それをラップしています。 また、書き込みに際しては、改行文字を同時に出力するprintln()メソッドを使用しています。 改行文字を出力しないprint()メソッドも存在します。
出力結果を見てわかるとおり、文字列や数値だけでなく、オブジェクトも適切に出力されています。 オブジェクトの値として出力されたこれらの文字列は、ObjectクラスからオーバーライドしたtoString()メソッドによって得られるものです。