전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

JAVA

[자바/JAVA] 프로그래밍 - IO 스트림 (Stream) 파일 읽기/쓰기 (2)

2023. 6. 19. 20:13

보조 스트림

보조스트림 : 기반스트림만으로 부족했던 성능을 보다 향상 시켜주는 스트림
   기반스트림에서 제공하지 않는 추가적인 메소드 제공 / 데이터 전송 속도 행상 시킴 + a
>> 외부매체와 직접적으로 연결되는 스트림 아님!!
   단독 사용 불가(반드시 기반스트림과 함께 사용)


보조 스트림을 추가하여 파일 쓰기

package com.kh.chap04_assist.part01_buffer.model.dao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferDao {
	
	// 프로그램 ------> 파일(출력)
	public void fileSave() {
		// FileWriter 기반스트림 가지고 해보자! (기반스트림 필수)
		// 파일과 직접적으로 연결해서 2바이트 단위로 출력할 수 있는 스트림
		
		// BufferedWriter : 버퍼라는 공간을 제공해주는 보조스트림 (속도향상) : 기반스트림이랑 이름 맞춰야함
		
//		BufferedWriter bw = new BufferedWriter("c_buffer.txt");	// 보조스트림은 단독 사용 불가
		
		// 1. 기반스트림 먼저 생성
//		FileWriter fw = new FileWriter("c_buffer.txt");
		
		// 2. 보조스트림 생성식 기반 스트림 객체를 전달하면서 생성
//		BufferedWriter bw = new BufferedWriter(fw);
		
		// 위의 두 줄을 한줄로
		/*
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter("c_buffer.txt"));
			
			// write 메소드 이용해서 데이터 출력
			bw.write("안녕하세요.\n");
			bw.write("반갑습니다.");
			bw.newLine();	// 추가적인 메소드 활용 가능
			bw.write("저리가세요");
			
			// 버퍼라는 공간에 계속 쌓아놨다가 한 번에 출력해줌 => 속도 향상에 좋다
			
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		*/
		
		// try~with~resource 구문으로 자원반납까지 더 간단하게 작업할 수 있음
		// jdk 7 버전 이상부터
		
		/*
		 * [표현법]
		 * try(try 블럭 내에서 사용할 스트림 객체 생성구문) {	// 알아서 try 다 끝나면 해당 스트림 반납까지 다해줌
		 * 
		 * } catch(예외클래스 e){
		 * 
		 * } 
		 */
	
		try (BufferedWriter bw = new BufferedWriter(new FileWriter("c_buffer.txt"));){
			// write 메소드 이용해서 데이터 출력
			bw.write("안녕하세요\n");
			bw.write("반갑습니다");
			bw.newLine();
			bw.write("저리가세요");
		} catch (IOException e) {
			e.printStackTrace();
		}	// 자원반납 구문 안써도 됨! 자동으로 반납까지 해줄꺼임!
		
	}
}

실행 Class

package com.kh.chap04_assist.part01_buffer.run;

import com.kh.chap04_assist.part01_buffer.model.dao.BufferDao;

public class BufferRun {

	public static void main(String[] args) {
		BufferDao dao = new BufferDao();
		dao.fileSave();
//		dao.fileRead();
	}
}

실행 결과


보조 스트림을 추가하여 파일 읽기

package com.kh.chap04_assist.part01_buffer.model.dao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferDao {
	
	// 프로그램 <------- 파일 (입력)
	public void fileRead() {
		// FileReader : 파일과 연결해서 2바이트 단위로 데이터를 입력 받을 수 있는 기반스트림
		// BufferedReader : 속도향상에 도움이 되는 보조 스트림
		
		try(BufferedReader br = new BufferedReader(new FileReader("c_buffer.txt"))) {
//			br.read();
//			br.readLine();	한 문장씩 가져오게 돼있음, 반환형 스트링!!!
			/*
			System.out.println(br.readLine());	// 안녕하세요
			System.out.println(br.readLine());	// 반갑습니다
			System.out.println(br.readLine());	// 저리가세요
			System.out.println(br.readLine());	// 파일의 끝을 만나면 null이 나오는구나
			*/
			/*
			while(true) {
				String value = br.readLine();
				if(value != null) {
					System.out.println(value);
				}
			}
			*/
			String value = null;
			while((value = br.readLine()) != null) {	// null 과 비교할때는 equals(x)
				System.out.println(value);
			}
		} catch (FileNotFoundException e) {	// 자식 => 위에 있어야 함. 없어도 됨
			e.printStackTrace();
		} catch (IOException e1) {	// 부모
			e1.printStackTrace();
		}
	}
}

실행 Class

package com.kh.chap04_assist.part01_buffer.run;

import com.kh.chap04_assist.part01_buffer.model.dao.BufferDao;

public class BufferRun {

	public static void main(String[] args) {
		BufferDao dao = new BufferDao();
//		dao.fileSave();
		dao.fileRead();
	}

}

실행 결과


객체 단위로 출력해줄 수 있는 보조스트림을 이용하여 Phone 객체를 파일에 읽기/쓰기

Phone Class

package com.kh.chap04_assist.part02_object.model.vo;

import java.io.Serializable;

public class Phone implements Serializable{	// 직렬화 과정이 필수 

	// 객체 자체를 입출력 하고자 한다면 직렬화 과정 필수
	
	private String name;
	private int price;
	
	public Phone() {
		
	}
	// alt + shift + s => o => enter
	public Phone(String name, int price) {
		super();
		this.name = name;
		this.price = price;
	}
	// alt + shift + s => alt + a => alt + s => enter
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	// alt + shift + s => s
	@Override
	public String toString() {
		return "Phone [name=" + name + ", price=" + price + "]";
	}
}

ObjectDao Class

package com.kh.chap04_assist.part02_object.model.dao;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import com.kh.chap04_assist.part02_object.model.vo.Phone;

public class ObjectDao {
	
	// 프로그램 -----> 파일 (풀력) 
	// 파일은 사실 우리가 볼려고 관상용으로 만든다기 보다는 나중에 읽어오기 위해 만드는 거임
	public void fileSave() {
		
		// 출력할 데이터 (Phone 객체)
		Phone ph1 = new Phone("아이폰", 1300000);
		Phone ph2 = new Phone("갤럭시", 1200000);
		Phone ph3 = new Phone("플립", 1500000);
		
		// 객체 단위로 출력해줄 수 있는 보조스트림 필요!!
		
		// ObjectXXX => 얘는 Writer, Reader가 없음!!
		// 바이트 기반 스트림
		
		// FileOutputStream : 파일과 연결해서 1바이트 단위로 출력할 수 있는 기반스트림
		// ObjectOutputStram : 객체 단위로 출력할 수 있도록 도움을 주는 보조스트림 (ObjectWriter 없음!!)
		
		try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d_phone.txt"))){
			
			oos.writeObject(ph1);
			oos.writeObject(ph2);
			oos.writeObject(ph3);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	// 프로그램 <------ 파일 (입력)
	public void fileRead() {
		try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d_phone.txt"))){
			/*
			System.out.println(ois.readObject());
			System.out.println(ois.readObject());
			System.out.println(ois.readObject());
			
			System.out.println(ois.readObject()); // 파일의 끝을 만나는 순간 예외 발생 = >EOFException (End Of File~~)
			*/
			
			while(true) {
				System.out.println(ois.readObject());
			}
			
			
		} catch (EOFException e) {
//			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();

		}
	}
}

 


파일쓰기

package com.kh.chap04_assist.part02_object.run;

import com.kh.chap04_assist.part02_object.model.dao.ObjectDao;

public class ObjectRun {

	public static void main(String[] args) {

		ObjectDao dao = new ObjectDao();
		dao.fileSave();
//		dao.fileRead();
	}

}

실행 결과

오류가 아님, 컴퓨터가 읽기 쉽게 바꿔서 쓴 것임


파일읽기

package com.kh.chap04_assist.part02_object.run;

import com.kh.chap04_assist.part02_object.model.dao.ObjectDao;

public class ObjectRun {

	public static void main(String[] args) {

		ObjectDao dao = new ObjectDao();
//		dao.fileSave();
		dao.fileRead();
	}

}

실행 결과

 

    'JAVA' 카테고리의 다른 글
    • [자바/JAVA] 프로그래밍 - 컬렉션(Collection) 실습 예제
    • [자바/JAVA] 프로그래밍 - 컬렉션(Collection)_ArrayList
    • [자바/JAVA] 프로그래밍 - IO 스트림 (Stream) 파일 읽기/쓰기 (1)
    • [자바/JAVA] 프로그래밍 - API_실습 문제 (2)
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바