/*
활용 예제 - 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);
}
}
}