가자미의 개발이야기
[자바] I/O 스트림 본문
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 |