File

예숑·2023년 12월 9일
0

JAVA - File

목록 보기
1/7

입출력하는 대상 중 하나이다.
입출력에 필요한 파일 및 디렉토리에 관한 정보를 제공해준다.
File 객체는 file일 수도 있고 directory 일 수도 있다.

💜File 경로 표시

  • 윈도우 : ||(역슬래쉬) 2개를 사용한다

    File f = new File("c:\test\a.text");

  • 윈도우 이외(Ex) 리눅스, 유닉스) : /(슬래쉬) 1개를 사용한다.

    File f = new File("/Users/yejin/Documents/eclipse_lyj/a.text");

파일의 종류
1) 논리적 파일: 코드 상 존재하는 것으로 디스크 상에 존재하지 않는다.
하지만 디스크에 생기면 그 때는 물리적 파일이다.
2) 물리적 파일: 디스크 상에 존재하는 것이다.

→ 경로는 물리적 존재가 아니라 식별자이다.
즉, File 객체를 구분하기 위해 존재하는 것이다.

파일의 삭제
→ 실제로 파일을 삭제 시 데이터가 삭제되는 것이 아니라 경로가 삭제되는 것!
경로가 삭제될 뿐 파일은 그대로 있기에 다시 복구가 가능하다.
(대신 파일을 찾을 수 없을 뿐)
but 경로 위에 다른 것이 덮어진 경우는 복구가 힘들다.

package kr.ac.green;

import java.io.File;

public class FileEx1 {

	public static void main(String[] args) {
		//f1과 f2, f3 는 같다.(논리적 파일)
		//경로(path)
		File f1 = new File("c:\\test\\a.text");
		//경로(parent), 파일(name)
		File f2 = new File("c:\\test", "a.text");
		
		//File => 파일 or 경로
		File dir = new File("c:\\test");
		File f3 = new File (dir, "a.text");
		
		//exists : 디스크 상에 파일이 존재하는지를 알 수 있다.(물리적 파일 여부 확인)
		//존재 여부가 상당히 중요하다. 있다면 다른사람이 쓰고 있다는 것이라서
		System.out.println(f1.exists());
		
	}
}

→ 디스크의 존재 여부는 상당히 중요한데, 이는 있을 경우 다른 사람이 쓰고 있음을 알 수 있기 때문이다.
exists( ) : 물리적 파일 여부를 확인해주는 메소드
(디스크 상에 파일이 존재하는지를 알 수 있다.)
만약 존재한다면 true 로 나오며, 없다면 false 로 나온다.

package home;

import java.io.File;

public class MyFileEx3 {
	public static void main(String[] args) {
		File dir  = new File("/Users/yejin/Documents/eclipse_lyj/abc");
		
		System.out.println(dir.isDirectory());
		
		System.out.println(dir.isFile());
	}
}

isDirectory( ) : Directory 인지를 알 수 있다.

isFile( ) : File 인지를 알 수 있다.

실행하면 둘 다 false 로 나오는데 확장자가 없는 파일도 있기에 파일인지 경로인지 모르기에 결과값이 false로 나온다.
제대로 값을 얻어내기 위해서는 논리적으로 존재하는 것이 아닌 물리적으로 존재해야 한다.

package home;

import java.io.File;

public class MyFileEx3 {

	public static void main(String[] args) {
		File dir  = new File("/Users/yejin/Documents/eclipse_lyj/abc");
		
		if(!dir.exists()) {
			dir.mkdir();
		}else {
			dir.delete();
		}
		System.out.println(dir.isDirectory());
		
		System.out.println(dir.isFile());
	}
}

위처럼 mkdir( ) 메소드를 통해 directory가 존재하지 않는다면 생성하고 존재한다면 delete( ) 메소드를 통해 삭제해준다.

생성하고 나면 isDirectory( ) 의 결과는 true가 나온다.

컴퓨터에서 연속성 저장성을 가지는 것은 파일이 유일하다.
프로그램에서 사용되는 기능은 4가지로 정의할 수 있다.
이를 CRUD 라고 하며, 각각 다음과 같다.

  • Create
  • Read
  • Update
  • Dalete

파일은 물리적인 존재를 생성하는 것이고, 디렉토리는 파일을 위한 경로가 만들어지는 것이다.
파일을 만들 때는 권한이 필요한데, 운영체계에서 부탁해서 만드는데 운영쳬계가 권한을 주지 않으면 IOException 이 발생한다.

package home;

import java.io.File;
import java.io.IOException;

public class MyFileEx3 {

	public static void main(String[] args) {
		File dir  = new File("/Users/yejin/Documents/eclipse_lyj/abc/def");
		//디렉토리 한번에 생성하기
		dir.mkdirs();
		
		File f = new File(dir, "fileEx1.text");
		
		try {
			f.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

mkdir( ) 는 하나의 디렉토리만 생성이 가능했다면, mkdirs( ) 는 한번에 여러 디렉토리가 생성 가능하다.

💜하부 파일, 디렉토리 한 번에 삭제하기

내용이 비워져 있지 않으면 delete( ) 를 해도 지워지지 않는다.
이때는 어떻게 할까?

package home;

import java.io.File;

public class FileDeleteEx1 {
	//하부 파일이나 디렉토리 모두를 삭제한다.
	public static void deleteDirectory(File dir) {
		File[] fileList  = dir.listFiles();
		
		for(File temp: fileList) {
			if(temp.isDirectory()) {
				deleteDirectory(temp);
			}else {
				temp.delete();
			}
		}
		dir.delete();	
	}
	
	public static void main(String[] args) {
		File dir = new File("c:\\mydirectory");
		
		//이래도 안지워지는데 안에 비워지지 않아서 그렇다.
		//비워져야지만 삭제 가능하다.
		//dir.delete();
		
		deleteDirectory(dir);
	}
}

0개의 댓글

관련 채용 정보