CatCommand2.java



import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.IOException;

/** ファイルの内容を読み込み、標準出力へ表示する CatCommand2クラス */

public class CatCommand2 {

   /** 最初に呼び出されるメソッド */

       public static void main( String argv[] ) {

           File file;               // 読み込むファイル
           FileReader fr;           // ファイルを読み込むメソッドを提供
           BufferedReader br;       // バッファリングして読み込むメソッドを提供
           PrintWriter pw;          // 標準出力に表示するメソッドを提供

           try{
               if( argv.length != 1 ) {  // コマンド引数の指定が不正

                   System.err.println("Usage: java CatCommand filename");
                   System.exit(0);
               }

               file = new File( argv[0] );  // ファイルオブジェクトの生成

               if( !file.isFile() ) {   // 通常のファイルではない

                   System.err.println( argv[0] + "is not a normal file.");
                   System.exit(0);
               }
               if( !file.canRead() ) {  // ファイルの読み込み許可がない

                   System.err.println("File" + argv[0] + "not readable.");
                   System.exit(0);
               }

               fr = new FileReader( file );
               br = new BufferedReader( fr );
               pw = new PrintWriter( System.out, true );

           // 1行単位で入出力
               String s;
               while( ( s = br.readLine() ) != null ) {
                 pw.println( s );
               }
           }
           catch( NullPointerException e ) {  // 文字列データがない

               System.err.println("Usage: java CatCommand filename");
               System.exit(0);
           }
           catch( IOException e ) {  // 入出力のエラーが発生

               System.err.println("IO Error....");
               System.exit(0);
           }
       }
}