자바를 이용해서 파일 시스템에 접근, 파일을 열거나 생성해서 데이터를 읽고, 쓰는 작업은 많이했다. 파일은 파일시트메의 디렉토리 혹은 폴더의 엔트리로 존재한다. 자바로 디렉토리(폴더)를 생성하고 삭제하는 코드를 구현해보자.
디렉토리 생성
특정 경로에 디렉토리가 없을 경우 자동으로 생성해주는 소스코드는 다음과 같다.
import java.io.File;
public class MakeDirectory {
public static void main(String[] args) {
// 생성할 디렉토리 경로
String path = "/tmp/testDir1";
File dir = new File(path);
// 디렉토리가 존재하는지 체크
if (!dir.exists()) {
try{
// 생성
boolean result = dir.mkdir();
if (result) {
System.out.println("Directory is created.");
} else {
System.out.println("Failed to create directory.");
}
} catch(Exception e){
System.out.println("Exception occurred.");
e.getStackTrace();
}
} else {
System.out.println("Directory already exists");
}
}
}
생성할 경로에 디렉토리가 있는지 우선 확인하고 없으면 생성한다. File
클래스에 정의되어 있는 mkdir() 메소드를 이용하면된다. 만약 생성이 실패한다면 실패했다고 알려주도록 코드를 작성했다.
코드를 실행하면
정상적으로 생성된다. (생성한 경로에 디렉토리가 만들어졌는지 확인해보자.)
디렉토리 삭제
디렉토리를 삭제하는 동작은 생성 동작에 비해서 약간 더 복잡하다. 파일 시스템에서 디렉토리를 삭제하려면 디렉토리 엔트리가 없어야 한다. 즉, 디렉토리 안에 또 다른 디렉토리나 파일이 존재하면 삭제가 안된다.
터미널에서 엔트리가 존재하는 디렉토리를 삭제할 때 rm -rf
같이 rm 명령에 -rf 옵션을 추가해서 디렉토리 하위에 있는 엔트리들을 한번에 같이 삭제한다. 자바 프로그램에서도 재귀적으로 하위 엔트리들을 삭제하면서 디렉토리를 삭제할 수 있다. (다만 디렉토리 하위에 지우면 안되는 것이 있는지 꼭 확인은 해야한다.)
디렉토리와 하위 엔트리들을 모두 지워주는 자바 프로그램은 다음과 같다.
import java.io.File;
public class DeleteDirectory {
public static void main(String[] args) {
String path = "/tmp/testDir1";
File file = new File(path);
removeDirectory(file);
}
public static void removeDirectory(File file) {
try {
// 존재하지 않으면 할일도 없음
if (!file.exists()) {
System.out.println("File not exists");
return;
}
if (file.isDirectory()) {
File[] files = file.listFiles();
// 디렉토리 엔트리가 있으면 삭제
if (files != null && files.length > 0) {
for (File entry : files) {
removeDirectory(entry);
}
}
}
// 파일 혹은 디렉토리 삭제
if (file.delete()) {
System.out.println("Remove directory (" + file.getAbsoluteFile().getPath() + ")");
} else {
System.out.println("Failed to remove directory (" + file.getAbsoluteFile().getPath() + ")");
}
} catch (Exception e) {
e.getStackTrace();
}
}
}
이 파일을 실행시키면, /tmp/testDir1
디렉토리가 존재하고 서브 디렉토리와 파일이 있을 경우 다음 결과를 얻게 된다.
/tmp/testDir1
디렉토리는 삭제된 것을 확인할 수 있다.
만약 디렉토리가 존재하지 않으면
이런 화면이 출력된다.
댓글