자바의 입출력을 위한 I/O 스트림
Input/Output
입출력 스트림의 구분
ㄴ 한방향으로 입력이 되거나 출력이 된다.
● 자료의 종류 : 바이트 스트림 / 문자 스트림
● 기능 : 기반 스트림 / 보조 스트림
ㄴ 데코레이션 스트림( 기반 스트림에 기능을 더함, 읽고쓰는기능 X )
ㄴ입력하는 스트림만 주가 되는 스트림
스트림의 종류
인풋- 바이트 , 리더-문자 , 버퍼드 인풋, 리더 - 보조
바이트 입력 스트림1
package ch01;
import java.io.IOException;
public class SysteminTest1 {
public static void main(String[] args) {
System.out.println("알파벳 하나를 쓰고 Enter를 누르세요");
int i;
try {
i = System.in.read(); //여러분의 입력을 기다리는 명령어
//출력
System.out.println("입력 받은 값 : " + i);
//문제1.
//화면에 i값을 A로 다시 출력해주세요.
System.out.println((char)i);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
바이트 입력 스트림2
package ch01;
import java.io.IOException;
import java.io.InputStreamReader;
public class SysteminTest2 {
public static void main(String[] args) {
System.out.println("알파벳 여러개 쓰고 Enter를 누르세요");
int i;
try {
//바이트를 문자로 변경해주는 녀석
//바이트 단위로 읽은 녀석을 문자단위로 읽어 들이게 하는 녀석
//-->보조스트림
InputStreamReader irs = new InputStreamReader(System.in);
while((i = irs.read())!= '\n') {
//화면에 출력
System.out.print((char)i);
}
// while( (i = System.in.read() ) != '\n' ) {
// System.out.print((char)i);
// }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
InputStream1
자바프로젝트파일명 > 소스 폴더assets(만들기) > 우클릭 > new > other > General > File 로 txt파일 만들기
package ch02;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamTest1 {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("assets/input.txt");
// int first = fis.read();
// System.out.println("first : " + first);
System.out.println((char)fis.read());
System.out.println((char)fis.read());
System.out.println((char)fis.read());
System.out.println((char)fis.read());
System.out.println((char)fis.read());
System.out.println((char)fis.read());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("파일이 없습니다.");
} finally {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("프로그래밍이 종료 되지 않았습니다.");
}
}
InputStream2
package ch02;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest2 {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("assets/input1.txt");
int i;
//while 문으로 처리를 합니다.
//fis.read() --> -1
while((i = fis.read()) != -1 ) {
System.out.print((char)i);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//finally 잊지 말것
}finally {
try {
fis.close(); //close()잊지 말것
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
InputStream3 : 자동 닫아주기 (결과 위와 동일)
package ch02;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest3 {
public static void main(String[] args) {
// try {
//
// } catch (Exception e) {
// // TODO: handle exception
// }
//자바 jdk 9버전 이후 부터 사용 가능 _ close자동 닫아주기
try(FileInputStream fis = new FileInputStream("assets/input1.txt")) {
int i;
while((i = fis.read())!= -1) {
System.out.println((char)i);
}
} catch (FileNotFoundException e) {
System.out.println("파일이 없습니다.");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
InputStream4
package ch02;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest4 {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("assets/input1.txt")){
byte [] bs = new byte[30];
int i;
while((i = fis.read(bs)) != -1) {
for(int j = 0; j < i; j ++) {
System.out.print((char)bs[j]);
}
System.out.println(" : " + i + "바이트 읽음");
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
InputStream5
package ch02;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamTest5 {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("assets/input1.txt")){
byte[] bs = new byte[10];
fis.read(bs, 0, 5);
for (byte b : bs) {
System.out.print((char)b);
}
}catch(FileNotFoundException e){
System.out.println("no File");
}catch(IOException e) {
e.printStackTrace();
}
}
}
OutputStream1_문자 출력하기
output.txt 파일을 만들고 코드를 입력해서 문자 적기
package ch03;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutPutStreamTest1 {
public static void main(String[] args) {
try(FileOutputStream fos = new FileOutputStream("output.txt")){
fos.write(65);
fos.write(66);
fos.write(67);
}catch(IOException e) {
System.out.println(e);
}
}
}
OutputStream2 : 배열 안에 있는 데이터를 한번에 출력하기
package ch03;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutPutStreamTest2 {
public static void main(String[] args) throws FileNotFoundException {
FileOutputStream fos = new FileOutputStream("output2.txt", true);
//true 는 +
try(fos) {//java 9버전 이상부터
byte[] bs = new byte[26];
byte data = 65; // 'A'의 아스키 값
//A - Z까지
for(int i = 0; i <bs.length; i++) {
bs[i] = data;
data++;
}
fos.write(bs); // 배열 안에 있는 데이터를 한번에 출력하기
} catch (IOException e) {
// TODO: handle exception
}
}
}
OutputStream3 : 배열 2번째 부터 10개 바이트 출력하기
package ch03;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class FileOutPutStreamTest3 {
public static void main(String[] args) {
//문자를 입력 받아서 output3.txt 에 넣기
// System.out.println("output3에 입력할 문자를 입력하세요 : ");
// Scanner sc = new Scanner(System.in);
// String output3txt = sc.nextLine();
try(FileOutputStream fos = new FileOutputStream("output3.txt")){
byte[] bs = new byte[26];
byte data = 65;//'A'
for (int i = 0; i < bs.length; i++) {
bs[i] = data;
data++;
}
fos.write(bs,2,10); //배열 2번째 부터 10개 바이트 출력하기
} catch (FileNotFoundException e) {
System.out.println(e);
} catch (IOException e) {
System.out.println(e);
}
System.out.println("출력이 완료되었습니다.");
}///end of main
}
문자를 읽어주는 스트림
package ch04;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderTest {
public static void main(String[] args) {
//Reader -> 문자를 읽어 드리는 스트림
try(FileReader fr = new FileReader("assets/article.txt")){
int i;
while((i = fr.read()) != -1) {
System.out.print((char)i);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
문자를 써주는 스트림
package ch04;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
public static void main(String[] args) {
try(FileWriter fw = new FileWriter("writer.txt", false)){
//덮어쓰기
// fw.write('A');
char buf[] = {'B','C','D','E','X','Y','Z'};
// fw.write(buf);
fw.write(buf, 1, 5);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
버퍼드 스트림
알집 파일 해당 자바 프로젝트에 넣고 실행
package ch05;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedStreamTest {
public static void main(String[] args) {
long millisecond = 0;
try(FileInputStream fis = new FileInputStream("a.zip")){
FileOutputStream fos = new FileOutputStream("copy2.zip");
//보조 스트림 사용해 보기
//input 스트림 - 보조
BufferedInputStream bis = new BufferedInputStream(fis);
//output 스트림 - 보조
BufferedOutputStream bos = new BufferedOutputStream(fos);
millisecond = System.currentTimeMillis();
int i ;
//기반 스트림 사용 코드
// while((i = fis.read()) != -1) {
// fos.write(i);
// }
while((i = bis.read()) != -1 ) {
bos.write(i);
}//기반 스트림에서 버퍼드를 사용해서 훨씬 더 빠르게 처리할 수 있다.
millisecond = System.currentTimeMillis() - millisecond;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("파일을 복사하는 데 " + millisecond + "초 소요 되었습니다.");
}
}
데이터 스트림
package ch05;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataStreamTest {
public static void main(String[] args) {
try(FileOutputStream fos = new FileOutputStream("data.txt")){
DataOutputStream dos = new DataOutputStream(fos);
dos.writeByte(100);
dos.writeChar('A');
dos.writeInt(10);
dos.writeFloat(3.14f);
dos.writeUTF("TEST");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try(FileInputStream fis = new FileInputStream("data.txt")){
DataInputStream dis = new DataInputStream(fis);
System.out.println(dis.readByte());
System.out.println(dis.readChar());
System.out.println(dis.readInt());
System.out.println(dis.readFloat());
System.out.println(dis.readUTF());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//end of main
}
Serializable
package ch06;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable{
String name;
String job;
public Person(String name, String job) {
this.name = name;
this.job = job;
}
@Override
public String toString() {
return name + ", " + job;
}
}
public class SerializationTest {
public static void main(String[] args) {
Person person1 = new Person("이순신", "CEO");
Person person2 = new Person("김유신", "CTO");
try(FileOutputStream fos = new FileOutputStream("serial.out")){
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(person1);
oos.writeObject(person2);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//-----------------------------------------------------------
try(FileInputStream fis = new FileInputStream("serial.out")){
ObjectInputStream ois = new ObjectInputStream(fis);
try {
Person p1 = (Person)ois.readObject();
Person p2 = (Person)ois.readObject();
System.out.println(p1);
System.out.println(p2);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'코리아 IT아카데미 > Java' 카테고리의 다른 글
19일차 | 자바에서 제공되는 자료구조 구현 클래스들 - 컬레션 프레임워크 (0) | 2021.11.11 |
---|---|
18일차 | git call back, 콜백메서드★, git branch 사용 (0) | 2021.11.10 |
17일차 | Git 관리, 래퍼 클래스 (0) | 2021.11.09 |
13일차 | (0) | 2021.11.09 |
14일차 | swing (0) | 2021.11.09 |