자바 - 디렉토리 작업
안녕하세요, 미래의 자바 마법사 여러분! 오늘, 우리는 자바에서 디렉토리의 세계를 탐험하는 흥미로운 여정에 떠날 거예요. 아직 코드를 한 줄도 작성해본 적이 없다고 해도 걱정하지 마세요 - 우리는 매우 기본적인 부분부터 시작하여 점점 더 복잡한 내용으로 나아갈 거예요. 이 수업이 끝날 때까지 디렉토리를 생성하고, 읽고, 삭제하는 데 능숙해질 거예요!
디렉토리는 무엇인가요?
코드에 들어가기 전에 디렉토리가 무엇인지 이해해보겠습니다. 디렉토리를 컴퓨터에 있는 폴더라고 생각해보세요. 물리적인 문서를 폴더에 정리하는 것처럼, 컴퓨터는 파일을 디렉토리에 정리합니다. 자바에서는 이러한 디렉토리를 프로그래밍적으로 조작할 수 있습니다. 멋지지 않나요?
자바 파일 클래스: 우리의 디렉토리 도구箱
자바에서 디렉토리를 작업하기 위해 File
클래스를 사용할 것입니다. 이 클래스는 파일과 디렉토리 작업에 사용되는 스위스 아rmy 트레이처럼 동작합니다. 자바 파일의 시작 부분에 이를 임포트해보겠습니다:
import java.io.File;
디렉토리 생성
단일 디렉토리 생성
단일 디렉토리를 생성하는 방법부터 시작해보겠습니다. 다음과 같이 하면 됩니다:
File directory = new File("MyNewDirectory");
boolean created = directory.mkdir();
if (created) {
System.out.println("디렉토리가 성공적으로 생성되었습니다!");
} else {
System.out.println("디렉토리를 생성하지 못했습니다.");
}
이 코드에서는 다음과 같은 작업을 수행합니다:
- 우리 디렉토리를 나타내는 새로운
File
객체를 생성합니다. -
mkdir()
메서드를 사용하여 디렉토리를 생성합니다. -
mkdir()
메서드는 디렉토리가 성공적으로 생성되면true
를, 그렇지 않으면false
를 반환합니다. - 적절한 메시지를 출력하기 위해 if-else 문을 사용합니다.
여러 중첩 디렉토리 생성
한 번에 여러 중첩 디렉토리를 생성하고 싶다면 어떻게 해야 하나요? 자바는 mkdirs()
메서드로 이를 지원합니다:
File nestedDirectories = new File("ParentDir/ChildDir/GrandchildDir");
boolean created = nestedDirectories.mkdirs();
if (created) {
System.out.println("중첩 디렉토리가 성공적으로 생성되었습니다!");
} else {
System.out.println("중첩 디렉토리를 생성하지 못했습니다.");
}
이 코드는 ParentDir
디렉토리를 생성하고, 그 안에 ChildDir
를 생성한 다음, GrandchildDir
를 생성합니다. 디렉토리의 가족 트리와 같아요!
디렉토리 목록 (읽기)
이제 몇 가지 디렉토리를 생성했으니, 이들의 내용을 어떻게 나열하는지 배워보겠습니다:
File directory = new File("ParentDir");
String[] contents = directory.list();
if (contents != null) {
System.out.println("ParentDir의 내용:");
for (String item : contents) {
System.out.println(item);
}
} else {
System.out.println("디렉토리가 존재하지 않거나 디렉토리가 아닙니다.");
}
다음은 이루어지는 작업입니다:
- 나열하고 싶은 디렉토리를 위한
File
객체를 생성합니다. - 디렉토리의 내용을 나타내는 문자열 배열을 얻기 위해
list()
메서드를 사용합니다. -
contents
가 null인지 확인합니다 (에러를 나타냄). - null이 아니라면, 각 항목을 출력하기 위해 for-each 루프를 사용합니다.
디렉토리 삭제
마지막으로, 디렉토리를 어떻게 삭제하는지 배워보겠습니다:
File directory = new File("DirectoryToDelete");
boolean deleted = directory.delete();
if (deleted) {
System.out.println("디렉토리가 성공적으로 삭제되었습니다!");
} else {
System.out.println("디렉토리를 삭제하지 못했습니다. 아마 비어 있지 않을 수도 있습니다.");
}
중요한 참고 사항: delete()
메서드는 비어 있는 디렉토리만 삭제합니다. 파일이나 다른 디렉토리가 포함된 디렉토리를 삭제하려고 시도하면 실패합니다.
비어 있지 않은 디렉토리 삭제
비어 있지 않은 디렉토리를 삭제하려면, 먼저 그 내용을 재귀적으로 삭제해야 합니다. 이를 위한 메서드는 다음과 같습니다:
public static boolean deleteDirectory(File dir) {
File[] contents = dir.listFiles();
if (contents != null) {
for (File file : contents) {
if (!Files.isSymbolicLink(file.toPath())) {
deleteDirectory(file);
}
}
}
return dir.delete();
}
이 메서드는 다음과 같은 작업을 수행합니다:
- 주어진 디렉토리의 모든 파일과 하위 디렉토리를 나열합니다.
- 각 항목에 대해 디렉토리인 경우 (및 심볼릭 링크가 아님), 재귀적으로 자신을 호출합니다.
- 내용을 지우고 나면 디렉토리 자체를 삭제합니다.
이를 다음과 같이 사용할 수 있습니다:
File directoryToDelete = new File("NonEmptyDirectory");
boolean deleted = deleteDirectory(directoryToDelete);
if (deleted) {
System.out.println("비어 있지 않은 디렉토리가 성공적으로 삭제되었습니다!");
} else {
System.out.println("비어 있지 않은 디렉토리를 삭제하지 못했습니다.");
}
결론
축하합니다! 자바에서 디렉토리 작업의 기본을 배웠습니다. 이제 프로그래밍적으로 디렉토리를 생성하고, 나열하고, 삭제할 수 있습니다. 이러한 기술은 많은 자바 응용 프로그램에서 기본적입니다. 파일 관리 시스템에서 복잡한 데이터 처리 파이프라인까지 다양한 용도를 가집니다.
기억해두세요, 연습이 체력을 만듭니다. 디렉토리를 생성하고, 그 안에 파일을 추가하고, 내용을 나열하고, 삭제하는 것을 시도해보세요. 이러한 개념들을 더 많이 실험해보면 더 편안하게 느끼게 될 거예요.
코딩을 즐기세요, 그리고 디렉토리가 항상 잘 정리되길 바랍니다!
메서드 | 설명 |
---|---|
mkdir() |
단일 디렉토리를 생성합니다 |
mkdirs() |
여러 중첩 디렉토리를 생성합니다 |
list() |
디렉토리 내용을 나타내는 문자열 배열을 반환합니다 |
listFiles() |
디렉토리에 있는 파일을 나타내는 추상 경로 이름 배열을 반환합니다 |
delete() |
디렉토리나 파일을 삭제합니다 |
exists() |
파일이나 디렉토리가 존재하는지 테스트합니다 |
isDirectory() |
이 추상 경로 이름이 디렉토리인지 테스트합니다 |
getName() |
파일이나 디렉토리의 이름을 반환합니다 |
getParent() |
이 추상 경로의 부모 경로 문자열을 반환합니다 |
getPath() |
이 추상 경로를 경로 문자열로 변환합니다 |
이러한 메서드들은 자바 여정을 계속할 때 신뢰할 수 있는 도구가 될 것입니다. 기억해두세요, 모든 전문가는 처음엔 초보자였습니다. 계속 코딩하고, 호기심을 지켜두고, 가장 중요한 것은 즐기세요!
Credits: Image by storyset