File Class
File()의 인자로 절대경로를 전달하여 파일 객체를 생성할 수 있습니다.
파일 객체는 그 경로를 가리키는 파일일 뿐, 실제로 파일이 생성되는 것은 아닙니다.
Map<String, Integer> fileMap = Maps.newHashMap();
File dir = new File(baseUploadPath + "/" + place.getId());
if(!dir.exists())//폴더가 존재하는지 체크
dir.mkdirs();//없으면 생성
String[] allFiles = dir.list();
for(String fileName : allFiles)
fileMap.put(fileName, 0);
문자열 path로 File 객체를 생성해 준 뒤, mkdir()을 이용해 폴더를 생성해 준다.
추가설명
▶ 폴더 생성
폴더 생성 전 exists() 메서드를 통해 현재 생성하려는 폴더가 있는지 확인한다.
해당 폴더가 없는 경우에 [File f].mkdir() 메서드를 사용해서 폴더를 생성한다.
mkdir() 메서드의 반환 값은 boolean 타입이다. 폴더가 성공적으로 생성되었을 경우 true를 반환하고, 생성되지 않은 경우 false를 반환한다.
▶ 파일 생성
createNewFile() 메서드를 사용해 새로운 파일을 생성할 수 있다.
[File f].createNewFile()
▶ 파일 이름 변경
renameTo() 메서드를 사용해 파일 이름을 변경할 수 있다. 메소드 인자 값으로는 File 객체를 넣는다.
인자 값으로 들어간 파일 객체의 이름으로 파일 이름이 변경된다.
[File f1].renameTo([File f2])
▶ 파일 삭제
delete() 메서드를 사용해 파일을 삭제할 수 있다.
[File f].delete()
※ 파일 삭제 이슈 / delete() 이슈
위와 같이 JAVA UTIL에서 지원하는 FILE 객체에 포함되어 있는 delete() 메서드를 사용하면 특정 파일을 지울 수 있다.
이는 비단 파일뿐만 아니라 폴더에도 해당되는데, 폴더를 지우기 위해서는 해당 폴더 하위에 아무 파일이 없어야만 한다.
=> 파일이나 디렉토리, 링크를 지울 수 있다. 타깃의 링크가 아니라, 경로를 넣으면 경로 자체를 지울 수 있지만, 해당 폴더가 비어있어야 한다. 그렇지 않으면 삭제 실패가 뜬다.
해당 메서드의 경우 대게 3가지의 Exception을 뱉어낸다.
- NoSuchFileException : 그런 파일 없음을 의미한다.
- DirectoryNotEmptyException : 경로가 비어있지 않음을 의미한다.
- IOException : 입출력 오류를 의미한다.
이다. 따라서 특정 파일의 상위 폴더를 삭제하고자 할 때에는 해당 메서드를 사용할 수 없다.
▶ FileUtils.cleanDirectory()
- 위와 같은 상황에서 쓸 수 있는 도구가 바로 FileUtils.cleanDirectory()이다.
FileUtils는 아파치에서 지원하는 FIle을 다루는 툴로서, 유용한 기능이 많이 있다.
사용법은 다음과 같다.
- org.apache.commons.io.FileUtils 자바파일 상단에 import 한다.
- FileUtils.cleanDirectory(new File("다운로드 경로"));
해당 코드를 이용하면 지정한 경로뿐만 아니라 하위 경로까지 모두 삭제해 준다.
import java.io.File;
import java.io.IOException;
public class Main {
public static final String TEST_DIRECTORY = "test";
public static final String TEST_FILE = "dummy.txt";
public static final String TEST_RENAME = "re_dummy.txt";
public static void main(String[] args) {
System.out.println("폴더/파일 생성, 이름변경, 삭제\n");
String path = System.getProperty("user.dir")
+ File.separator // Windows('\'), Linux, MAC('/')
+ TEST_DIRECTORY;
System.out.println("절대 경로 : " + path);
File f = new File(path);
System.out.println();
// 폴더 생성: mkdir()
if (!f.exists()) { // 폴더가 존재하는지 체크, 없다면 생성
if (f.mkdir())
System.out.println("폴더 생성 성공");
else
System.out.println("폴더 생성 실패");
} else { // 폴더가 존재한다면
System.out.println("폴더가 이미 존재합니다.");
}
System.out.println();
// 파일 생성 : createNewFile()
File f2 = new File(f, TEST_FILE); // File(디렉터리 객체, 파일명)
System.out.println(f2.getAbsolutePath());
if (!f2.exists()) { // 파일이 존재하지 않으면 생성
try {
if (f2.createNewFile())
System.out.println("파일 생성 성공");
else
System.out.println("파일 생성 실패");
} catch (IOException e) {
e.printStackTrace();
}
} else { // 파일이 존재한다면
System.out.println("파일이 이미 존재합니다.");
}
System.out.println();
// 파일 이름 변경: renameTo()
File f3 = new File(f, TEST_RENAME); // 변경할 이름
System.out.println(f3.getAbsolutePath());
if (f2.exists()) { // 파일이 존재할 때만 이름 변경
if(f2.renameTo(f3))
System.out.println("파일 이름 변경 성공");
else
System.out.println("파일 이름 변경 실패");
} else {
System.out.println("변경할 파일이 없습니다.");
}
System.out.println();
// 파일 삭제: delete()
File f4 = new File(f, TEST_RENAME);
if (f4.exists()) {
if (f4.delete())
System.out.println("파일 삭제 성공");
else
System.out.println("파일 삭제 실패");
} else {
System.out.println("삭제할 파일이 없습니다.");
}
}
}
출처: https://mimah.tistory.com/38 [Mimah:티스토리]
'Java' 카테고리의 다른 글
[Java] List<E> subList(int fromIndex, int toIndex); (0) | 2022.07.15 |
---|---|
[Java] File Class - 특정 디렉토리 파일 목록 가져오기 (list/listFiles) (0) | 2022.07.15 |
[Spring] StringUtils 클래스로 String 다루기 (0) | 2022.07.14 |
[Java] for문 List의 Null 체크 (0) | 2022.07.12 |
[Java] 로그인 인증방식은 어떤것이 좋을까? JWT(Json Web Token)발행 및 확인 vs Session (0) | 2022.07.11 |