////////////////////////////////////////////////////////////////////////////////
// << j614.java >>
//
//  ファイル処理(1)ファイル管理(ディレクトリ下のファイル、ディレクトリを
//                  再帰的に表示)
//
//    指定したディレクトリ下にあるすべてのファイル、ディレクトリを再帰的に表示する。
//    ファイル名はコマンドラインから入力する。
//
////////////////////////////////////////////////////////////////////////////////

import java.io.*;

class j614 {

  // ディレクトリを再帰的にたどるメソッド。
  static void search(String dirname) {
    try {
      File d = new File(dirname);
      String path = d.getPath();

      String a[] = d.list();
      for( int i=0; i<a.length; i++ ) {
        File g = new File(dirname,a[i]);

        // ディレクトリの下のディレクトリを再帰的に表示。 
        if( g.isDirectory() ) { 
          String s = dirname + "/" + a[i];
          search(s);
        } else {
          // ディレクトリの下のファイルを表示。 
          System.out.println(path + "/" + a[i]);
        }
      }

    } catch ( Exception e ) { }
  }

  public static void main(String args[]) {
    // 引数の解析。指定がない場合、カレントディレクトリに設定。
    String dirname;
    if( args.length == 1 ) { dirname = args[0]; } else { dirname = "."; }

    File d = new File(dirname);

    // 引数がディレクトリか否かチェック。
    if( !d.isDirectory() ) {
      System.err.println(dirname + "はディレクトリではありません");
      System.exit(0); 
    } else { 
      // 再帰的にディレクトリ、ファイルを表示。
      search(dirname);
    }
  }

}
実行結果
% javac j614.java
% java j614 TEST
TEST/file1
TEST/file2
TEST\DIR2/ccc
TEST\DIR1/aaa
TEST\DIR1/bbb