코드스테이츠_국비교육/[Section1]

18.06_파일 입출력_22.09.15

생각없이 해도 생각보다 좋다. 2022. 9. 17. 23:36

학습 키워드

  • 바이트 기반 스트림
  • 문자 기반 스트림
  • 파일 클래스

 

InputStream, OutputStream

>의미 및 특징

: 입력과 출력을 다루기 위한 스트림

: 단방향으로 데이터를 전송하는 스트림

: 스트림의 대상(데이터 송수신의 대상)이 누구냐에 따라 다른 입출력 스트림을 사용해야한다.

 

바이트 기반 스트림

>의미 및 특징

: 입출력 단위가 byte.

>FileInputStream

: 데이터의 대상이 File인 입력 스트림

: File로부터 데이터를 입력받는 스트림

: File을 읽을 수 있음

: 해당 File은 IDE의 Workspace에 존재해야한다

import java.io.FileInputStream;
  
public class ExampleInput{
    public static void main(String args[])
    {
        try {
            FileInputStream fileInput = new FileInputStream("readNewFile.txt");
            int i = 0; // i 변수 초기화
            while ((i = fileInput.read()) != -1) {
            //i=fileInput.readm() 로 대체
            //fileInput.read()
            //: next byte를 검사하는 메서드
            //: 다음 byte가 존재하면 0~255의 int를 반환함
            //: 다음 byte가 없으면 -1을 반환함
                System.out.print((char)i); //next byte의 내용을 출력
            }
            fileInput.close();//해당 stream 종료
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}
/*
조건
1: readNewFile.txt 파일 존재
2: readNewFile.txt 파일의 내용 >> code
코드 결과(콘솔 출력)
code
*/

>FileOutputStream

: 데이터의 대상이 File인 출력 스트림

: File에 데이터를 출력하는 스트림

: File을 생성 및 File의 내용을 입력할 수 있음

: 해당 File은 IDE의 Workspace에 존재해야한다

import java.io.FileOutputStream;
  
public class ExampleOutput{
    public static void main(String args[]) {
        try {
        	//인스턴스 생성(파일 생성...?)
            FileOutputStream fileOutput = new FileOutputStream("createNewFile.txt");
            String word = "code"; //word 초기화

            byte[] b = word.getBytes(); //word를 byte[]로 만듬
            fileOutput.write(b); //byte[]을 받아 하나씩 파일에 출력
            fileOutput.close(); //FileOutputStream 종료
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}
/*
코드 결과(파일 생성)
1. createNewFile.txt 생성
2. createNewFile.txt 에 code 출력
*/

 

문자(char) 기반 스트림

>의미 및 특징

: 입출력 단위가 char.

: Java의 char는 2byte기 때문에 문자 기반 스트림을 사용함.

: InputStream(byte 기반) -> Reader(char 기반)

: OutputStream(byte 기반) -> Writer(char 기반)

>FileReader

: 데이터의 대상이 File인 입력 스트림

: File로부터 데이터를 입력받는 스트림

: File을 읽을 수 있음

: 해당 File은 IDE의 Workspace에 존재해야한다

public class ExampleInput {
    public static void main(String args[]) {
        try {
            String fileName = "ReadNewFile.txt";
            FileReader file = new FileReader(fileName);

            int data = 0;

            while((data=file.read()) != -1) {
                System.out.print((char)data);
            }
            file.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

>FileWriter

: 데이터의 대상이 File인 출력 스트림

: File에 데이터를 출력하는 스트림

: File을 생성 및 File의 내용을 입력할 수 있음

: 해당 File은 IDE의 Workspace에 존재해야한다

public class ExampleOutput{
    public static void main(String args[]) {
        try {
            String fileName = "makeNewFile.txt";
            FileWriter writer = new FileWriter(fileName);

            String str = "written!";
            writer.write(str);
            writer.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

File

>의미 및 특징

: 파일과 디엙토리에 접근할 수 있는 클래스

: 생성자의 인자로 디렉토리 경로와 파일명.확장자를 제공한다.

: createNewFile() 메서드로 파일을 생성할 수 있다.

>공식 문서

https://docs.oracle.com/javase/7/docs/api/java/io/File.html