가자미의 개발이야기

[자바] I/O 스트림 본문

Java/자바 기본 문법

[자바] I/O 스트림

가자미 2021. 2. 26. 12:19

1. I/O 스트림

-I/O 스트림 : 어떻게 데이터를 입력하고 출력할 것인가.

 

-입력 스트림(읽기) : 자바 프로그램으로 데이터를 읽음

-출력 스트림(저장) : 자바 프로그램에서 데이터를 내보냄

-입력과 출력을 동시에 할 수 있는 스트림은 없다.

InputStream in = new FileInputStream("data.dat");	//입력 스트림 생성
int data = in.read();	//데이터 읽기
in.close();	//스트림 종료
OutputStream out = new FileOutputStream("data.dat");	//출력 스트림 생성
out.write(7);	//데이터 7을 파일에 전달
out.close();	//스트림 종료

I/O 스트림을 사용할 때 중요한 점은 스트림이 만들어지지 않았는데 스트림을 종료(close메소드)하는 경우이다.

이를 방지하기 위한 finally 기반 close메소드 활용법을 보자

class Write7ToFile2{
	public static void main(String[] args) throws IOException{
		OutputStream out = null;
		try {
			out = new FileOutputStream("data.dat");
			out.write(7);
		}
		finally {
			if(out != null)	//출력 스트림 생성 성공했다면,
				out.close();
		}
		
	}
}

class Read7FromFile2{
	public static void main(String[] args) throws IOException{
		InputStream in = null;
		try {
			in = new FileInputStream("data.dat");
			int dat = in.read();
			System.out.println(dat);
		}
		finally {
			if(in != null)	//입력 스트림 생성 성공했다면
				in.close();
		}
	}
}

 

try finally 코드보다 간단한 try with resource 코드

class Write7ToFile2{
	public static void main(String[] args) throws IOException{
		try(OutputStream out = new FileOutputStream("data.dat")){
			out.write(7);
		}
		catch(IOException e) {
			e.printStackTrace();
		}
	}
}

class Read7FromFile2{
	public static void main(String[] args) throws IOException{
		try (InputStream in = new FileInputStream("data.dat")){
			int dat = in.read();
			System.out.println(dat);
		}
		catch(IOException e) {
			e.printStackTrace();
		}
	}

IO 스트림 활용

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;

public class StreamPtc {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("대상파일 : ");
		String src = sc.nextLine();
		System.out.print("사본이름 : ");
		String dst = sc.nextLine();
		
		try(InputStream in = new FileInputStream(src);
				OutputStream out = new FileOutputStream(dst)){
			byte buf[]= new byte[1024];
			int len;
			
			while(true) {
				len=in.read(buf);	//배열 buf로 데이터를 읽어들임. 없으면 -1
				if(len ==-1)
					break;
				out.write(buf,0,len);	//len 바이트 만큼 데이터를 저장
			}
		}
		catch(IOException e) {
			e.printStackTrace();
		}
	}
}

'Java > 자바 기본 문법' 카테고리의 다른 글

[자바] 문자 스트림  (0) 2021.02.26
[자바] 필터 스트림  (0) 2021.02.26
[자바] 시각과 날짜 관련 코드  (0) 2021.02.19
[자바] 스트림 활용 메소드  (0) 2021.02.17
자바 스트림의 기초  (0) 2021.02.09