Java

250213_자바 FileIOStream 클래스들

minquu 2025. 2. 13. 22:11
반응형

- 파일 스트림들

  - 파일 In, Out input 관련 기능을 모아 놓은 Stream 클래스들임

  - 당연히 파일을 열고 닫기 떄문에 .close를 해줘야함, 대신 try (){}에서 ()안에 작성하면 try 구문을 나가면 자동으로 닫아 줌


인풋 / 리더기

package Chapter23;

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamTest01 {
    public static void main(String[] args) {
        try(FileInputStream fis = new FileInputStream("inputText.txt");){
            int data;
            while ((data = fis.read()) != -1) {
                System.out.println((char)data);
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

FileInputStream 클래스 생성 -> Input 해서 해당 클래스로 반환해줌

바이트 단위로 읽어오기 때문에 while 안에서 돌려서 확인해줌

문자는 아스키 코드 기준으로 바이트 화 해서 쓰기 때문에 한글을 쓰면 깨짐 -> 아스키에 없으니깐...

 

package Chapter23;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputStreamReaderTest {
    public static void main(String[] args) {
        try (InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))){
            int i;
            while ((i=isr.read())!=-1){
                System.out.print((char)i);
            }
            System.out.println();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

InputStreamReader 클래스를 이용해서 파일 인풋 후 -> 리더로 사용 가능함

 

package Chapter23;

import java.io.FileReader;
import java.io.IOException;

public class FileInputStreamTest02 {
    public static void main(String[] args) {
        try(FileReader fr = new FileReader("inputText.txt")){
            int data;
            while ((data = fr.read()) != -1) {
                System.out.print((char)data);
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
}

FileReader 클래스는 한글을 가져올 수 있음


아웃풋

package Chapter23;

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStream02 {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("output2.txt");){
            byte[] buf = new byte[26];
            byte data = 65;

            for (int i = 0; i < buf.length; i++) {
                buf[i] = data;
                data++;
            }
            fos.write(buf);
        }
        catch (IOException e){
            e.printStackTrace();
        }

        System.out.println("출력 완료");
    }
}

FileOutputStream 클래스는 아웃풋 해주는 클래스

 

package Chapter23;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriteTest {
    public static void main(String[] args) {
        try (FileWriter fw = new FileWriter("writer.txt")) {
            fw.write('A');
            char[] buf = {'B', 'C', 'D', 'E', 'F', 'G'};
            fw.write(buf);
            fw.write("안녕하세요. 잘 써지나요?");
            fw.write(buf, 2, 4);
            fw.write("65");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("파일 생성 완료");
    }
}

FileWriter 클래스도 아웃풋 해주는 클래스, 대신 보다 유연한 형태로 저장이 가능함

 


버퍼 사용법

package Chapter23;

import java.io.*;

public class BufferedFileCopyTest {
    public static void main(String[] args) {
        long miliseconds = 0;

        try(FileInputStream fis = new FileInputStream("a.zip");
            FileOutputStream fos = new FileOutputStream("copy.zip");
            BufferedInputStream bis = new BufferedInputStream(fis);
            BufferedOutputStream bos = new BufferedOutputStream(fos)){
            miliseconds = System.currentTimeMillis();

            int i;
            while ((i = bis.read()) != -1) {
                bos.write(i);
            }

            bos.flush();
            miliseconds = System.currentTimeMillis() - miliseconds;
        }
        catch (IOException e){
            e.printStackTrace();
        }

        System.out.println(String.format("파일 복사하는데 : %d miliseconds", miliseconds));
    }
}

BufferedInputStream과 BufferedOutputStream  클래스를 사용해서 무거운 파일을 사용할 때 버퍼된 값을 활용해서 

시간을 단축 시킬수 도 있음. 버퍼클래스를 read 및 write를 해줄 수 있음 

 

 

반응형

'Java' 카테고리의 다른 글

250212_자바 람다식, 스트림, 예외처리  (1) 2025.02.12
250211_Java 중첩 클래스  (0) 2025.02.11