JAVA_File 관리

JW__1.7·2022년 8월 10일
0

JAVA 공부일지

목록 보기
23/30

File 클래스

  • 패키지 : java.io
  • 파일 및 디렉터리 관리
  • 생성 방법
    • new File(경로, 파일)
    • new File(파일)
  • 경로 구분 방법
    • Windows : 백슬래시 \
    • Linux : 슬래시 /

폴더(디렉터리) 생성

  • File.mkdir() : 만들려는 디렉토리의 상위 디렉토리가 존재하지 않을 경우 생성 불가
  • File.mkdirs() : 만들려는 디렉토리의 상위 디렉토리가 존재하지 않을 경우 상위 디렉토리까지 생성

폴더(디렉터리) 삭제

  • delete()
// 폴더(디렉터리) 만들기
File dir = new File("C:\\storage");
		
// 존재하지 않으면 만들겠다.
	if(dir.exists() == false) {		// if(!dir.exists())
		dir.mkdirs();
	}
// 존재하면 삭제하겠다.
	else {
		dir.delete();			// 지금 지운다.
		//dir.deleteOnExit();		// JVM이 종료되면 지운다.
	}

폴더와 파일 생성과 Exception 예외처리

폴더와 파일 생성에는 IOException이 있을 수 있으니 try-catch문을 넣거나 throws문을 넣어 예외처리를 해 주는 것이 좋다.

  • storage 폴더와 my.txt 파일을 생성
  • 에러를 콘솔에 찍어달라는 예외 메소드 추가
File file = new File("C:\\storage", "my.txt");
		
	try {
		if(file.exists() == false) {
			file.createNewFile();
		}
		else {
			file.delete();
		}
	} catch(IOException e) {
		// 개발할 때 넣는 catch 블록 코드
		e.printStackTrace();	// 에러를 콘솔에 찍어라.
	}

File 관련 메소드

  • getName() : 파일명을 가져온다.
  • getParent() : 자신이 가진 상위폴더(경로)를 가져온다.
  • isDirectory() : 폴더(디렉토리) 여부를 true와 false로 반환한다.
  • isFile() : 파일 여부를 true와 false로 반환한다.

File 관련 메소드 예제

	File file = new File("C:\\storage", "my.txt");
		
	System.out.println("파일명 : " + file.getName());
	System.out.println("경로 : " + file.getParent());
	System.out.println("전체경로(경로 + 파일명) : " + file.getPath());
	System.out.println("디렉터리인가? " + file.isDirectory());
	System.out.println("파일인가? " + file.isFile());
		
	long lastModifiedDate = file.lastModified();
	System.out.println("수정한 날짜 : " + lastModifiedDate);
		
	String lastModified =  new SimpleDateFormat("a hh:mm yyyy-MM-dd").format(lastModifiedDate);
	System.out.println("수정한 날짜 : " + lastModified);
	// 수정한 날짜 : 오전 09:50 2022-08-10
				
	long size = file.length();	// 바이트 단위
	System.out.println("파일크기 : " + size + "byte");
	// 영문은 1byte , 한글은 2byte

디렉터리 내부의 모든 파일/디렉터리를 File 객체로 가져오기

	File dir = new File("C:\\GDJ");
		
	File[] list = dir.listFiles();
	for(int i = 0; i < list.length; i++) {
		System.out.println(list[i].getName());
	}

파일 최근 수정된 날짜 출력하기

  • DecimalFormat() : 숫자에 패턴을 지정해 줄 수 있다.
	File dir = new File("C:\\GDJ");
	File[] list = dir.listFiles();
		
	int dirCnt = 0;
	int fileCnt = 0;
	long totalSize = 0;
		
	for(File file : list) {
		if(file.isHidden()) {
			continue;
		}
		String lastModified = new SimpleDateFormat("yyyy-MM-dd  a hh:mm").format(file.lastModified());
		String directory = "";
		String size ="";
			
		if(file.isDirectory()) {
			directory = "<DIR>";
			size = "     ";
			dirCnt++;
		} else if(file.isFile()) {
			directory = "      ";
			size = new DecimalFormat("#,##0").format(file.length()) + "";
			fileCnt++;
			totalSize += Long.parseLong(size.replace(",", ""));
			}
			String name = file.getName();
			System.out.println(lastModified + "   " + directory + "   " + size + " " + name);
		}
		System.out.println(dirCnt + "개 디렉터리");
		System.out.println(fileCnt + "개 파일 " + new DecimalFormat("#,##0").format(totalSize) + "바이트");

Windows와 Linux 등 플랫폼마다 다른 경로 구분자 지원

Windows는 백슬래시\를 사용하여 경로 구분, Linux는 슬래시/를 사용하여 경로 구분을 한다.
운영체제마다 자동으로 경로 구분자를 바꿔주는 도구가 있다.

  • separator

플랫폼마다 다른 경로 구분자 지원

File file = new File("C:" + File.separator + "storage" + File.separator + "my.txt");
System.out.println(file.getName());

C:\storage 디렉터리 삭제하기
디렉터리가 비어 있어야 삭제할 수 있으므로 내부 파일을 먼저 삭제

String sep = File.separator;
		
File file = new File("C:" + sep + "storage", "my.txt");
if(file.exists()) {
	file.delete();
}
		
File dir = new File("C:" + sep + "storage");
		
if(dir.exists()) {
	dir.delete();
}

0개의 댓글