Java로 파일목록읽기

/*
활용 예제 - 5
- API(java.io.File) 활용 예제
- 명령행 매개변수로 지정된 디렉토리에 포함된 파일 목록을 하위 디렉토리까지 포함하여 출력합니다.
- 명령행 매개변수의 값을 생략하면 현재 디렉토리에 포함된 파일 목록을 보여줍니다.
- 기준이 되는 디렉토리 하위의 모든 디렉토리와 파일의 정보가 출력되도록 합니다.
- 파일 목록을 출력할 때 앞에 공백이 출력하도록 하여 하위 디렉토리에 대한 구분을 합니다.
*/
// 이 소스에서 사용하게될 File 이라는 클래스가 존재하는 패키지를 import 합니다.
import java.io.*;

class FileList {
   public static void main(String args[]) {
      // File 유형의 참조형 변수를 선언합니다. 지역 변수이므로 null 로 초기화합니다.
      File f = null;
      if (args.length == 0) {
        // 전달된 명령행 매개변수가 없으면 현재 디렉토리를 가지고 File 객체를 생성합니다.
         f = new File(".");
      } else {
        // 전달된 명령행 매개변수를 가지고 File 객체를 생성합니다.
         f = new File(args[0]);
      }
      // FileList 객체를 생성합니다.
      // recusrse() 메서드는 static 메서드가 아니므로 FileList의 객체를 생성한 후에 호출합니다.
      FileList fd = new FileList();
      fd.recurse(f, 0);
   }
   void recurse(File dirFile, int depth){
      // 지정된 디렉토리에 존재하는 파일과 하위 디렉토리에 대한 명칭들을 String 형 배열 객체로 리턴합니다.
      String contents[] = dirFile.list();
      for(int i = 0; i < contents.length; i++){
        // 하위 디렉토리의 Depth 만큼 들여쓰기가 되도록 합니다.
         for(int spaces = 0; spaces < depth; spaces++)
            System.out.print("  ");
         System.out.println(contents[i]);
         // 현재 디렉토리와 파일 정보를 가지고 File 객체를 생성합니다.
         File child = new File(dirFile, contents[i]);
         // 현재 디렉토리의 파일이 하위 디렉토리인 경우에만 resurse() 메서드를 재귀 호출합니다.
         if(child.isDirectory())
            recurse(child, depth+1);
      }
   }
}