자바 - 디렉토리 작업

안녕하세요, 미래의 자바 마법사 여러분! 오늘, 우리는 자바에서 디렉토리의 세계를 탐험하는 흥미로운 여정에 떠날 거예요. 아직 코드를 한 줄도 작성해본 적이 없다고 해도 걱정하지 마세요 - 우리는 매우 기본적인 부분부터 시작하여 점점 더 복잡한 내용으로 나아갈 거예요. 이 수업이 끝날 때까지 디렉토리를 생성하고, 읽고, 삭제하는 데 능숙해질 거예요!

Java - Directories

디렉토리는 무엇인가요?

코드에 들어가기 전에 디렉토리가 무엇인지 이해해보겠습니다. 디렉토리를 컴퓨터에 있는 폴더라고 생각해보세요. 물리적인 문서를 폴더에 정리하는 것처럼, 컴퓨터는 파일을 디렉토리에 정리합니다. 자바에서는 이러한 디렉토리를 프로그래밍적으로 조작할 수 있습니다. 멋지지 않나요?

자바 파일 클래스: 우리의 디렉토리 도구箱

자바에서 디렉토리를 작업하기 위해 File 클래스를 사용할 것입니다. 이 클래스는 파일과 디렉토리 작업에 사용되는 스위스 아rmy 트레이처럼 동작합니다. 자바 파일의 시작 부분에 이를 임포트해보겠습니다:

import java.io.File;

디렉토리 생성

단일 디렉토리 생성

단일 디렉토리를 생성하는 방법부터 시작해보겠습니다. 다음과 같이 하면 됩니다:

File directory = new File("MyNewDirectory");
boolean created = directory.mkdir();

if (created) {
System.out.println("디렉토리가 성공적으로 생성되었습니다!");
} else {
System.out.println("디렉토리를 생성하지 못했습니다.");
}

이 코드에서는 다음과 같은 작업을 수행합니다:

  1. 우리 디렉토리를 나타내는 새로운 File 객체를 생성합니다.
  2. mkdir() 메서드를 사용하여 디렉토리를 생성합니다.
  3. mkdir() 메서드는 디렉토리가 성공적으로 생성되면 true를, 그렇지 않으면 false를 반환합니다.
  4. 적절한 메시지를 출력하기 위해 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("디렉토리가 존재하지 않거나 디렉토리가 아닙니다.");
}

다음은 이루어지는 작업입니다:

  1. 나열하고 싶은 디렉토리를 위한 File 객체를 생성합니다.
  2. 디렉토리의 내용을 나타내는 문자열 배열을 얻기 위해 list() 메서드를 사용합니다.
  3. contents가 null인지 확인합니다 (에러를 나타냄).
  4. 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();
}

이 메서드는 다음과 같은 작업을 수행합니다:

  1. 주어진 디렉토리의 모든 파일과 하위 디렉토리를 나열합니다.
  2. 각 항목에 대해 디렉토리인 경우 (및 심볼릭 링크가 아님), 재귀적으로 자신을 호출합니다.
  3. 내용을 지우고 나면 디렉토리 자체를 삭제합니다.

이를 다음과 같이 사용할 수 있습니다:

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