티스토리 뷰

Java/IO

File 클래스

따강아지 2022. 2. 26. 23:13

File Class는 파일과 폴더를 관리하는 Class

1. 파일 객체 생성 

public File(String pathname) { }
public File(String parent, String child) { }
public File(File parent, String child) { }
public File(URI uri) { }
파일을 생성 하는 시점에는 실제 파일의 존재 유무는 확인 하지 않습니다.
파일을 읽어 오는 동작을 할 때 실제 파일이 없으면 FileNotFondException이 발생 하므로 존재 유무를 체크 해애 합니다.

 

File(String pathname) 폴더 이름 또는 파일 이름이 위치를 가리키는 File 객체
File(String parent, String child) parent 폴더에 child의 위치를 가리키는 File 객체
File(File parent, String child) 폴더의 위치를 가리키는 File객체의 하위에 있는 폴더 또는 파일의 위치를 가리키는 File 객체
File(URI uri) 
URI(Unfiform resource identifier)의 위치를 가리키는 File 객체 

 

2. 주요 API

메서드 설명
boolean isDirectory() 폴더 여부 확인
boolean isFile() 파일 여부 확인 
boolean createNewFile() 파일 생성
String[] list() 폴더와 파일 이름을 문자열 배열로 리턴
File[] listFiles() 폴더와 파일 이름을 파일 객체 배열로 리턴
boolean mkdir() 해당 경로에 폴더 생성 ( 하위 폴더만 생성 )
boolean mkdirs() 존재 하지 않는 경로상의 모든 폴더 생성
String getAbsolutePath() 파일의 절대 경로
boolean exists() 파일 또는 폴더의 존재 여부 확인
String getName() 파일 이름
String getParent() 폴더 이름

 

3. 예제

public class FileClass {
  public static void main(String... args) throws IOException {
    File file = new File("d:\\works\\readme.txt");

    if (!file.exists()) {
        file.createNewFile();
    }

    // File 객체 주요 API
    System.out.println("절대 경로   : " + file.getAbsolutePath());
    System.out.println("폴더 여부   : " + file.isDirectory());
    System.out.println("파일 여부   : " + file.isFile());
    System.out.println("현재 이름   : " + file.getName());
    System.out.println("부모 이름   : " + file.getParent());
    System.out.println("현재 path   : " + file.getPath());
  }
}

 

3-1. File file = new File("d:\\works\readme.txt");

1. File 객체 생성 
2. 운영 체계에 따라서 파일 구분자를 Windows("\\"), Mac ("/")을 사용 하는데 여러 운영 체계에서 소스 변경 없이 사용 하기 위해서는 File.separator를 사용 해서 작성 하는 것이 좋습니다

 

String filename = "d:" + File.separator + "works" + File.separator + "readme.txt";
File file = new File(filename);


3-2. if (!file.exists())
 

1. exists()는 파일 객체가 가리키고 있는 위치에 해당 값(d:\\works\readme.txt 파일)이 있으면 참, 없으면 거짓을 리턴 하는 API로 존재 하지 않으면 파일을 생성 하기 위해서 부정 ( ! )을 사용 합니다.
2. 파일이 존재 하지 않으면 createNewFile() API를 통해서 파일을 생성 합니다.
3.createNewFile() API는 디스크에 파일을 생성 하는 것으로 오류 시 처리 하기 위해서 Method에 throws 릍 통해서 오류 처리를 위임 하기 위한 방법과 다음과 같이 직접 처리 하는 방법이 있습니다.

 

try {
	file.createNewFile();
} catch (IOException e) {
	// 이곳에 오류 처리에 대한 로직을 작성 합니다.
    e.printStackTrace();
}


** 전체 소스 : https://github.com/hyomee/JAVA_EDU/blob/main/IO/src/com/hyomee/file/FileClass.java

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com


** 상대경로와 절대경로 **

 경로를 지정하는 방법은 상대 경로와 절대 경로로 나뉘는데 상대 경로는 작성한 파일이 실행한 위치를 기준으로 표기 하는 방법으로 현재 작업 폴더가 "d:\\temp"라면 이 폴더를 기준으로 하위에 있는 폴더를 지정 할려면 "works\readme.txt"로 표시 합니다. 절대 경로는 "d:\\temp\work\readme.txt"로 표시 합니다.

4. 연습문제

1. 폴더명을 입력 하면 폴더안에 있는 폴더와 파일을 출력 한다.
2. 해당 폴더의 하위 폴더에 신규 폴더를 만들고 만들어진 폴더 안에 새로운 파일을 만든다.




4-1. 연습문제 코드 
4-1-1. Class 파일을 생성 하고 main 메서드를 생성 한다.

public class ExampleFile01 {
  public static void main(String... args) {
    // 이곳에 Logic 개발 
  }
}


4-1-2 ."폴더명을 입력 하면 폴더안에 있는 폴더와 파일을 출력 한다"를 해결 하기 위해서 메서드를 생성 한다.

  static void getDirectoryAndFile(File directory) {
    File[] files = directory.listFiles();
    for(File file: files) {
      if (file.isDirectory()) {
        // 폴더 이면 폴더 안의 내용을 읽읽
        viweFile(file);
        getDirectoryAndFile(file);
      } else {
        viweFile(file);
      }
    }
  }
- getDirectoryAndFile 메서드는 디렉토리를 가지고 있는 File 객체를 받아서 출력 하는 기능을 한다.
   . 디렉토리 안에 있는 File 객체를 배열로 구하는 listFiles() API를 사용하여 files에 저장 한다.
   . 저장 된 files 배열을 for 문을 사용 하여 반복 하면서 배열 안의 요소(File file)가 디렉토리 이면 디렉토리를 다시 다시 Directory안의 내용을 검색 하기 위해서 
getDirectoryAndFile()를 호출(재귀 호출) 한다. 파일이면 내용을 출력 한다.

 

static void viweFile(File file) {
    String dirOrFile = file.isDirectory() ? "폴더" : "파일";
    System.out.println( dirOrFile + " : " + file.getParent() + " : " + file.getName());
}
viweFile 메소드 : File 객체를 받아서 폴더 또는 파일 출력 하기 위해 삼항 연산자를 사용 하였으며 getParent() API를 사용 하여 상위 폴더를,  getName() API를 사용 해서 폴더와 파일 이름 사용 합니다.

 

4-1-3. "해당 폴더의 하위 폴더에 신규 폴더를 만들고 만들어진 폴더 안에 새로운 파일을 만든다"

  static File makeDir(File parent, String directoryName) {
    File newDir = new File(parent, directoryName);
    if (!newDir.exists()) newDir.mkdir();
    return newDir;
  }
4-1-3-1. 신규 폴더를 생성 하기 위해서 makeFile 메서드를 생성 한다.
- File makeDir(File parent, String directoryName) : 폴더을 생성 하고 생성하고 생성된 File 객체 반환 한다.
- 기능 :
   . 현재 폴더(File parent)와 생성한 폴더명(String directoryName)를 매개변수로 신규 생성 할 객채 생성
   . Directory가 존재 하지 않으면 mkdir API를 사용 해서 Directory 생성 한다.

 

  static File makeFile(File directory, String filename) throws IOException {
    File newFile = new File(directory, filename);
    if (!newFile.exists()) newFile.createNewFile();
    return newFile;
  }
4-1-3-2. 신규 파일을 생성 하기 위해서 makeFile 메서드를 생성 한다.
-  File makeFile(File directory, String filename)
 : 신규 파일을 생성 하고 생성된 File 객체를 반환 한다.
- 기능 :
   . 현재 폴더(File directory)와 신규 파일String filename)를 매개변수 받아서 새롭게 생성 할 File 생성
   . 파일이 존재 하지 않으면 createNewFile() API를 사용 해서 파일을 생성 한다.

 

4-1-4.  프로그램을 완성 한다.

public static void main(String... args) throws IOException {
    // 폴더 위치 지정 ( 다른 폴더를 지정 하는 경우 이곳을 수정 )
    String pathname = "d:" + File.separator + "temp" ;

    // file 객체 생성
    File file = new File(pathname);
    if(file.exists()) { // 해당 위치에 존재 여부 확인
      // 해당 위치에 폴더가 없으므로 폴더 생성
      file.mkdir();
    }

    System.out.println( "** 폴더 안에 내용을 출력 한다.");
    getDirectoryAndFile(file);

    System.out.println( "** 폴더를 생성 하고 생성 한 폴더에 파일을 생성 한다.");
    // 새로운 폴더를 생성 한다.
    File newDir = makeDir(file, "SampleDir");

    // 새로운 파일을 만든다
    File newFile = makeFile(newDir, "readme.txt");
    getDirectoryAndFile(file);
}

4-2. 연습 문제 결과

연습 문제 결과


   

* 전체 소스 : https://github.com/hyomee/JAVA_EDU/blob/main/IO/src/com/hyomee/file/ExampleFile01.java

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com

 

'Java > IO' 카테고리의 다른 글

InputStream, OutputStream  (0) 2022.02.27