파일 조작
자바에서 파일을 다루기 위해서는 File 클래스를 사용한다.
파일 뿐만이 아니라 디렉토리도 나타낸다.
윈도우의 경우에는 \ 로 디렉토리를 구별하는데
\ -> 윈도우에서는 이스케이프 하기위해 \\
이스케이프 하기위해 역슬래시를 두개를 쓴다.
자바에서 디렉토리를 삭제할때는 디렉토리가 비어있어야 한다.
실행 유저의 권한에 의해서 삭제가 실패하거나 한다면 예외가 발생한다
NIO라고 자바7에 추가된것이 있는데 차이에 대해서는 따로 포스팅 하고
이 페이지에서는 예제만 다뤄보자
파일 디렉토리의 삭제(FIle클래스)
public class ExerciseFile {
public static void main(String[] args) {
// 파일 혹은 디렉토리를 참조변수화 한다.
File file = new File("test-file.txt");
if (file.delete()) {
// 정상적으로 삭제 됐을 시
System.out.println("삭제성공");
} else {
// 삭제가 안됐을 때
System.out.println("삭제실패");
}
}
}
기본적으로 위에같이 지정해주면 프로젝트의 루트 디렉토리 기준으로 파일명이 지정된다.
프로젝트 루트 디렉토리에 test-file.txt를 생성하고 실행하면
삭제성공
해당 파일이 없으면
삭제실패
라고 나온다.
파일 디렉토리의 삭제(NIO.2)
public class ExerciseFile {
public static void main(String[] args) throws IOException {
// 파일 혹은 디렉토리를 참조변수화 한다.
Path path1 = Paths.get("test-file.txt");
// 파일 혹은 디렉토리를 삭제한다.
Files.delete(path1);
////////////////////////////////////
// 조건 식으로 삭제할 경
////////////////////////////////////
Path path2 = Paths.get("test-file2우.txt");
if (Files.deleteIfExists(path2)) {
// 정상적으로 삭제 됐을 시
System.out.println("삭제성공");
} else {
// 삭제가 안됐을 때(파일이나 디렉토리가 없을 때)
System.out.println();
}
}
}
파일이나 디렉토리가 존재하지 않으면 익셉션
Exception in thread "main" java.nio.file.NoSuchFileException: test-file.txt
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:249)
at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:105)
at java.base/java.nio.file.Files.delete(Files.java:1152)
at org.example.ExerciseFile.main(ExerciseFile.java:17)
파일이나 디렉토리가 존재하면 정상적으로 파일이 삭제된 것을 확인 할 수 있다.
[localhost practice]$ touch test-file.txt
[localhost practice]$ ls
pom.xml src target test-file.txt
# 실행 후
[localhost practice]$ ls
pom.xml src target
[localhost practice]$