자바(9)

파일 클래스

java.os 패키지는 파일 및 디렉토리 정보를 저장하는 File 클래스를 제공합니다.

객체 생성 방법

File file = new File("경로");

존재() 메소드

파일 또는 폴더가 존재하는지 확인할 수 있습니다.

File file = new File("경로");
Boolean isExist = file.exists();

길이() 메서드

파일의 크기(단위 바이트)를 반환합니다.

File file = new File("경로");
long fileSize = file.length(); //파일크기 리턴 메소드
System.out.println("파일크기 : " + fileSize); // byte
System.out.println("파일크기 : " + fileSize/1024 + "KB"); // KB
System.out.println("파일크기 : " + fileSize/1024/1024 + "MB"); // MB

삭제() 메서드

  • 파일 삭제 방법
  • 휴지통으로 이동하지 않고 바로 삭제됩니다.
File file = new File("경로");
Boolean isDelete = file.delete();

mkdir(), mkdirs() 메서드

  • 메이크 디렉토리의 약자
  • mkdir() → 마지막 경로(디렉토리 또는 파일)만 존재하지 않으면 그 이름으로 새로운 디렉토리가 생성되고, 중간 경로가 없으면 새로운 디렉토리가 생성되지 않는다.
  • mkdirs() → 경로에 없는 모든 디렉토리 생성

디렉토리()

디렉토리인지 확인

File file = new File("경로");
Boolean isThisDirectory = file.isDirectory();

파일()

파일인지 확인

File file = new File("경로");
Boolean isThisFile = file.isFile();

입력/출력 스트림

Java는 입력 및 출력 스트림을 통해 데이터를 입력하고 출력합니다.

파일 끝(EOF)

데이터 원본에서 더 이상 데이터를 읽을 수 없음을 나타냅니다.

바이트 스트림

  • 이미지, 멀티미디어, 텍스트 등 모든 종류의 데이터 입출력에 사용됩니다.
  • 바이트 단위의 I/O(1바이트)
  • 입력스트림, 출력스트림

FileInputStream

String fileName = "data.txt"; //절대경로 주지않으면 현재경로에서 찾음
FileInputStream fis = null; //try-catch문 사용으로 인해 외부에 선언해야함

try {
    fis = new FileInputStream(fileName); //파일 가져오기
    while(true) {
        int data = fis.read(); //1byte 단위로 읽어옴(한글깨짐)
        if (data == -1) { //EOF -1 리턴
            break; //반복문 해제
        }
        System.out.printf("%c", data); //char로 출력했을 경우 -> 한글 깨져서 출력됨
    }
} catch (Exception e) {
    System.out.println(e);
} finally {
    // 자원반납
    try {
        if (fis != null) {fis.close();}
    } catch (Exception e) {}
}

부호 흐름

  • 문자만 입력/출력할 때 사용
  • 문자 단위의 I/O(2바이트)
  • 독자, 작가

파일 판독기

String fileName = "data.txt"; //절대경로 주지않으면 현재경로에서 찾음
FileReader fr = null; //try-catch문 사용으로 인해 외부에 선언해야함

try {
    fr = new FileReader(fileName); //파일 가져오기
    while(true) {
        int data = fr.read(); //2byte 단위로 읽어옴
        if (data == -1) { //EOF -1 리턴
            break; //반복문 해제
        }
        System.out.printf("%c", data); //char로 출력했을 경우 -> 한글 깨지지 않고 출력됨
    }
} catch (Exception e) {
    System.out.println(e);
} finally {
    // 자원반납
    try {
        if (fr  != null) {fr.close();}
    } catch (Exception e) {}

우회로

다른 스트림과 연결하여 다양한 유용한 기능을 제공하는 스트림.

InputStreamReader: 바이트 스트림을 문자 스트림으로 변환

버퍼링됨-: 향상된 I/O 성능

Data- : 데이터 입/출력의 기본형

인쇄- : 개행을 처리하고 형식이 지정된 문자열을 출력합니다.

Object-: 객체 진입/퇴장

버퍼링된 리더

향상된 타이핑 성능

Enter(\n)를 기반으로 한 줄씩 읽기

String fileName = "data.txt"; //절대경로 주지않으면 현재경로에서 찾음
FileReader fr = null; //try-catch문 사용으로 인해 외부에 선언해야함
BufferedReader br = null; //try-catch문 사용으로 인해 외부에 선언해야함

try {
    fr = new FileReader(fileName); //파일 가져오기
    br = new BufferedReader(fr); //보조 스트림에 넣기

    while(true) {
        String line = br.readLine(); //엔터(\\n)를 기준으로 한줄씩 가져오기
        if (line == null) { //EOF null 리턴
            break; //반복문 해제
        }
        System.out.printf("%c", line);
    }
} catch (Exception e) {
    System.out.println("파일 읽기 실패 : " + e);
} finally {
    // 자원반납
    try {
        if (br != null) {br.close();} //바깥 스트림부터 닫기
    } catch (Exception e) {}
    try {
        if (fr != null) {fr.close();}
    } catch (Exception e) {}
}

PrintWriter

줄 바꿈 처리 및 형식이 지정된 문자열 출력

String fileName = "d:/java202301/sungjuk.txt";
FileWriter fw = null;
PrintWriter out = null;
try {
    // append true -> 추가, false -> 덮어쓰기
    fw = new FileWriter(fileName, true);
    //autoFlush true -> 버퍼를 청소하면서 사용
    out = new PrintWriter(fw, true);

    // oop0313.Test07_format.java참조
    // System.out.println(); 콘솔창에 출력
    // out.println(); 해당 파일에 출력
    out.println("무궁화,95,90,100");
    out.println("홍길동,100,100,100");
    out.println("라일락,90,95,35");
    out.println("개나리,85,70,75");
    out.println("진달래,35,40,60");

    System.out.println("sungjuk.txt 데이터 파일 완성");

} catch (Exception e) {
    System.out.println("파일 쓰기 실패");
    e.printStackTrace();
} finally {
		// 자원반납
    try {
        if (out != null) {out.close();} //바깥 스트림부터 닫기
    } catch (Exception e) {}
    try {
        if (fw != null) {out.close();}
    } catch (Exception e) {}
}