・   「Java実践編」 第4回

入出力とファイルの取り扱い

java.ioパッケージのストリームのクラスと Fileクラスの機能を用いて、 ファイルや標準入出力への入出力やファイルシステムを操作するサンプルを紹介します。


・ 準備(学内向け):
各自のJavaの課題の作業用のディレクトリ java2 に移動しなさいなさい。 その中で以下の作業を行いなさい。


・ 基本課題1:「ファイルへの入出力」

  1. ソースファイル CpCommand.java (教科書 P.173)を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。
    
    java  CpCommand  CpCommand.java  CpCommand.bak
    
    
  3. ファイルが正しくコピーされたか確認しなさい。
    
    cat  CpCommand.bak      (UNIX, Windows Cygwinの場合)
    type  CpCommand.bak     (Windowsの MS-DOSウィンドウの場合)
    
    

・ 基本課題2:「ファイルへの入出力(その2)」

  1. ソースファイル CpCommand2.java (教科書 P.175-6)を作成しなさい。
  2. コンパイルできたら、先のサンプルと同じ機能を持つことを確認しなさい。
・ 基本課題3:「テキストの入出力」

  1. ソースファイル CatCommand.java (教科書 P.177-8)を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。
    
    java  CatCommand  CpCommand.java
    java  CatCommand  CatCommand.java
    
    
・ 基本課題4:「行単位のバッファリング」

  1. ソースファイル CatCommand2.java (教科書 P.178-9)を作成しなさい。
  2. コンパイルできたら、先のサンプルと同じ機能を持つことを確認しなさい。

・ 基本課題5:「ディレクトリ情報の取得」

  1. ソースファイル LsCommand.java (教科書 P.187-8)を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。
    
    java  LsCommand
    java  LsCommand  ..
    java  LsCommand  /etc    (Linuxの場合)
    java  LsCommand  C:\     (Windowsの場合)
    
    

・ 今週のレポート課題(学内用):
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。(Subjectは program21)

  1. 課題5のプログラムを用いて、 自分の java2 のディレクトリの下にあるファイル名の一覧を調べて報告しなさい。

・ 応用課題1:「Fileのオブジェクトの再帰的な生成」

  1. ソースファイル FindCommand.java (教科書 P.188-90)を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。 (ディレクトリを移動してもプログラムを呼び出せるように、 最初に CLASSPATHの設定を行います。この方法はシステムによって異なります。)
    
    CLASSPATH=~/java2:. ;  export CLASSPATH    (UNIX ksh の場合)
    setenv  CLASSPATH  ~/java2:.               (UNIX csh の場合)
    CLASSPATH="Z:\java2;." ;  export CLASSPATH (Windows Cygwinウィンドウの場合)
    set  CLASSPATH=Z:\java2;.                  (Windows MS-DOSウィンドウの場合)
    java  FindCommand  Life.java
    cd  /usr                                (UNIXの場合)
    cd  /cygdrive/c                         (Windows Cygwinの場合)
    cd  C:\                                 (Windows MS-DOSウィンドウの場合)
    java  FindCommand  rt.jar
    
    

・ 応用課題2:「オブジェクトの入出力」
Serializabiryの機能を用いてオブジェクトを直接ファイルに保存したり、 ファイルから読み込んだりしてみましょう。

  1. ソースファイル Student.java (教科書 P.181)と StudentSaver.java (教科書 P.182-3)と StudentLoader.java (教科書 P.184-5)を作成しなさい。
  2. 各プログラムをコンパイルしなさい。
  3. StudentSaverを実行し、数名分のデータをキーボードから入力しなさい (架空のデータでもかまわない)。
  4. ファイル Student.ser が存在することを確認しなさい。
  5. このファイルはバイナリ形式なので、通常のエディタでは内容を見ることが できません。UNIXの場合ならば od コマンドを用いて中身を調べることができます。
    
    od  -c  Student.ser      (Linuxの場合)
    
    
  6. StudentLoaderを実行し、入力されたデータが表示されることを確認しなさい。
・ 応用課題3:「odコマンドの作成」
今回勉強したことを使えば odコマンドと同じような機能を持つプログラムを Javaによって開発することも可能です。 (バイナリファイルを読み込み、アスキーコードの文字列として整形して表示する。) うまくできれば、UNIX上だけでなく Windows上でもバイナリファイルの内容を手軽に 調べることが可能になります。 たとえば、次のようにして実行すると、上の odコマンドと同様の結果が得られる ようにしてください。 (ヒントです)


java  OdCommand  Student.java
java  OdCommand  Student.class
java  OdCommand  Student.ser


実習の目次   今週の講義の内容