[Java] 파일 및 디렉토리 조작

수경·2023년 8월 11일
0

파일 및 디렉토리 조작

  • 윈도우 탐색기로 하는 모든 행동
  • 파일을 대상으로 하는 행동들: 정보확인, 새로만들기, 이름바꾸기, 이동하기, 삭제하기 등
  • 폴더를 대상으로 하는 행동들: 파일과 비슷

1. 파일/폴더에 접근하기

자바 프로그램에서 외부 파일/폴더를 접근하는 방법

  1. 외부 파일을 참조하는 참조 객체(대리자) 생성한다.
  2. 참조 객체 조작으로 외부 파일에 적용이 된다.

메소드

경로 : "C:\class\code\git\home\JavaTest\data\number.txt"

  • getName() : 파일 이름을 반환한다. > data.txt
  • isFile() : 해당 경로가 파일인지 boolean형으로 반환한다. > data.txt 경로이기에 true값 반환
  • isDirectory() : 해당 경로가 폴더인지 boolean형으로 반환한다. > data.txt 경로이기에 false값 반환
  • length() : 파일크기(바이트)를 반환한다. / 폴더 자체의 크기는 없다.
  • getAbsolutePath() : 전체 경로를 반환한다.
  • lastModified() : 마지막으로 수정한 날짜를 반환한다.
  • isHidden() : 숨겨진 파일인지 boolean형으로 반환한다.
  • getParent() : 폴더 전용 메소드 / 부모 폴더 경로를 반환한다.

파일 접근 예제코드

		//파일 참조 클래스 > 객체 생성
		File file = new File("C:\\class\\code\\java\\file\\data.txt");
		
		//파일이 있는지 사전체크한다.
		if (file.exists()) {
			System.out.println("파일이 있습니다.");

			System.out.println(file.getName());		//data.txt
			System.out.println(file.isFile());		//true
			System.out.println(file.isDirectory());		//false
			System.out.println(file.length());		//36 > 파일크기(바이트)
			System.out.println(file.getAbsolutePath());		//C:\class\code\java\file\data.txt > 전체 경로
			
			System.out.println(file.lastModified());		//1691379562704	> 마지막으로 수정한 날짜
			System.out.println(file.isHidden());		//false
			
			//tick > 년원일시분초
			Calendar c1 = Calendar.getInstance();
			System.out.println(c1.getTimeInMillis());
			c1.setTimeInMillis(file.lastModified());
			
			System.out.printf("%tF %tT\n", c1, c1);
			
		} else {
			System.out.println("파일이 없습니다.");
		}

파일이 있습니다.
number.txt
true
false
31
C:\class\code\git\home\JavaTest\data\number.txt
1691669548075
false
1691763344824
2023-08-10 21:12:28

폴더 접근 예제 코드

		//파일 참조 객체와 사용법이 같음
		File dir = new File("C:\\class\\code\\git\\home\\JavaTest\\data");
		
		if (dir.exists()) {
			System.out.println(dir.getName());		//data
			System.out.println(dir.isDirectory());		//true
			System.out.println(dir.length());		//0 > 폴더 자체의 크기는 없다.
			System.out.println(dir.getParent());	//C:\class\code\git\home\JavaTest
            
		} else {
			System.out.println("폴더가 없습니다.");
		}

data
true
0
C:\class\code\git\home\JavaTest

2. 파일 생성 및 삭제하기

메소드

  • createNewFile() : 파일을 생성한다.
  • delete() : 파일을 삭제한다.
    삭제 후 휴지통으로 이동되는 것이 아닌 영구 삭제됨으로 주의해야한다.

생성 예제 코드

C:\class\code\java\file 폴더에 hello.txt 파일 생성하기

		//파일 생성하기 : 저장할 파일 이름까지 설정힌다.
		File file = new File("C:\\class\\code\\java\\file\\hello.txt");
		
		if (!file.exists()) {
			try {
				System.out.println(file.createNewFile());	//파일 생성
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("이미 동일한 파일이 존재합니다.");
		}

삭제 예제 코드

C:\class\code\java\move 폴더 속 data.txt 파일 삭제하기

		File file = new File("C:\\class\\code\\java\\move\\data.txt");
		
		if (file.exists()) {
			System.out.println(file.delete());	//주의!! 복구 안됨!!
		}

3. 파일/폴더명 변경 & 파일/폴더 위치 이동하기

메소드

  • renameTo(변경할 파일/폴더의 객체) : 파일명 변경 및 파일 위치를 이동시킨다.

예제 코드

		//파일명 바꾸기
		File file = new File("C:\\class\\code\\java\\file\\데이터1.txt");
		File newFile = new File("C:\\class\\code\\java\\file\\data.txt");
		
		if (file.exists()) {
			//고쳐질 경로와 파일 이름을 매개변수로 받는다.
			System.out.println(file.renameTo(newFile));
			
		}
        
		//폴더 이동하기
		File dir = new File("C:\\class\\code\\java\\file\\TODO");
		File newDir = new File("C:\\class\\code\\java\\move\\TODO");
		
		if(dir.exists()) {
			System.out.println(dir.renameTo(newDir));
		} 

4. 폴더 생성 및 삭제하기

메소드

  • mkdir() : 하나의 폴더만 생성한다.
  • mkdirs() : 여러 폴더 생성 가능, 연관된 폴더 모두 생성한다.
  • delete() : 빈 폴더일 때만 가능하다.
    - 내용물(파일, 자식폴더)이 있으면 삭제가 불가능하다.

예제 코드

C:\class\code\java 폴더에 하위 폴더 생성하기

		//폴더 만들기
		File dir = new File("C:\\class\\code\\java\\aa");
		File dirs = new File("C:\\class\\code\\java\\bb\\cc");
		
		if(!dir.exists()) {
			System.out.println(dir.mkdir());	//aa 폴더 생성
			System.out.println(dir.mkdirs());	//bb, cc 폴더 생성
		}

TODO 폴더 삭제하기

		File dir = new File("C:\\class\\code\\java\\move\\TODO");
		
		if(dir.exists()) {
			System.out.println(dir.delete());
		}

5. 폴더 내용보기

메소드

  • listFiles() : 폴더 출력 후 파일을 출력한다.

예제코드

		String path = "C:\\class\\dev\\eclipse";
		
		File dir = new File(path);
        File[] list = dir.listFiles();
		
        //list가 폴더이면 [폴더명]출력
		for (File d : list) {
			if(d.isDirectory()) {
				System.out.printf("[%s]\n", d.getName());
			}
		}
		
        //list가 파일이면 파일명 출력
		for (File f : list) {
			if(f.isFile()) {
				System.out.println(f.getName());
			}
		}

[dir]
file1.txt
file2.txt

profile
웹백엔드개발자를 꿈꾸는

0개의 댓글