Java / / 2022. 7. 15. 09:16

[Java] File Class를 이용한 파일 생성

반응형

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을 뱉어낸다. 

  1. NoSuchFileException : 그런 파일 없음을 의미한다.
  2. DirectoryNotEmptyException : 경로가 비어있지 않음을 의미한다.
  3. IOException : 입출력 오류를 의미한다.

이다. 따라서 특정 파일의 상위 폴더를 삭제하고자 할 때에는 해당 메서드를 사용할 수 없다.

 

FileUtils.cleanDirectory()

  • 위와 같은 상황에서 쓸 수 있는 도구가 바로 FileUtils.cleanDirectory()이다.

 

FileUtils는 아파치에서 지원하는 FIle을 다루는 툴로서, 유용한 기능이 많이 있다.
사용법은 다음과 같다.

 

  1. org.apache.commons.io.FileUtils 자바파일 상단에 import 한다.
  2. 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:티스토리]
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유