[Java] 파일입출력

SungminPark·2024년 1월 3일
0

자바 정리

목록 보기
6/10
post-thumbnail

🎈 입출력이란?


  • 입력과 출력을 줄여 부르는 말
  • 두 대상간의 데이터를 주고 받는것

🎈 스트림(Stream)이란?


  • 데이터를 운반하는데 사용되는 연결통로
  • 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름
  • 하나의 스트림으로 입출력을 동시에 수행할 수 없다
  • 입출력을 동시에 수행하려면 2개의 스트림이 필요하다

🎈 바이트 기반 스트림


InputStream, OutputSteam

InputStream

  • abstract int read()
  • int read(byte[] b)
  • int read(byte[] b, int off, int len)

OutputStream

  • abstract void write(int b)
  • void write(byte[] b)
  • void write(byte[] b, int off, int len)

File(InputStream, OutputSteam) : 파일 대상 입출력
ByteArray(InputStream, OutputSteam) : 메모리 대상 입출력
Piped(InputStream, OutputSteam) : 프로세스 대상 입출력
Audio(InputStream, OutputSteam) : 오디오장치 대상 입출력

🎈 문자기반 스트림


File(Reader, Writer) : 파일 대상 입출력
CharArray(Reader, Writer) : 메모리 대상 입출력
Piped(Reader, Writer) : 프로세스 대상 입출력
String(Reader, Writer) : 메모리 대상 입출력

🎇 바이트 기반 스트림


InputStream의 메서드

OutputStream의 메서드

스트림 예제


package JavaIOTest;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class ByteArrayIOTest02 {
    public static void main(String[] args) {
        byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        byte[] outSrc = null;

        byte[] temp = new byte[4];
        //입출력용 스트림 객체 생성
        ByteArrayInputStream bin = new ByteArrayInputStream(inSrc);
        //출력용 스트림 객체 생성
        ByteArrayOutputStream bout = new ByteArrayOutputStream();

        try{
            //0보다 크면 읽을 데이터 존재
            while(bin.available() > 0) {
                //temp배열 크기만큼 한번에 저장
//                //이 방식은 배열크기가 고정되어있어 기존에 남아있는데이터도 같이 쓰여질 수 있다
//                bin.read(temp);
//                bout.write(temp);

                //실제 읽어온 byte 수를 반환한다.
                int len = bin.read(temp);
                //temp배열의 데이터들 중에서 0번째부터 len의 개수만큼 출력한다.
                bout.write(temp, 0, len);
                System.out.println("temp => " + Arrays.toString(temp));
            }
            System.out.println();
            outSrc = bout.toByteArray();

            bin.close();
            bout.close();

            //출력하기
            System.out.println(" inSrc => " + Arrays.toString(inSrc));
            System.out.println(" outSrc => " + Arrays.toString(outSrc));
        }catch (IOException e) {

        }
    }
}

🎈 단 입력받아서 구구단.txt작성하는 예제


package JavaIOTest;

import javax.swing.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class FileIOTest03 {
    public static void main(String[] args) {
        //사용자로부터 출력할 단을 입력받아 구구단을 파일로 출력하는 프로그램 작성하기
        //출력할 파일명 : 'd:d_other/gugudan.txt'
        FileOutputStream fout = null;
        try {
            File file = new File("D:/D_Other/gugudan.txt");

            fout = new FileOutputStream(file);
            Scanner sc = new Scanner(System.in);
            System.out.print("출력할 단을 입력하세요>> ");
            int dan = sc.nextInt();
            for(int i = 1; i <= 9; i++) {
                String str = dan + " * " + i + " = " + dan*i + '\n';
                byte[] bStrArr = str.getBytes("UTF-8");
                fout.write(bStrArr);
            }
            System.out.println("작업 완료!!");

        }catch (IOException e) {

        }
        finally {
            if(fout!= null) try{fout.close();}catch (IOException e) {}
        }

    }
}
profile
개발자 준비 중 입니다

0개의 댓글