예외처리 및 입출력 이해하기

JongseokLee·2021년 7월 27일
0
post-thumbnail

예외처리 및 입출력 이해하기🏆

1. 예외처리 이해하기

1) 예외(exception)

  • 정상적인 프로그램 실행과정에서 발생할 수 있는 에러
  • 예외를 프로그램에서 처리하면 프로그램의 안정성이 높아지고 견고해 짐
  • 대표적인 예외 사례

    파일을 읽어야 하는데 파일이 없는 경우, 네트워크 응답이 없는 경우

  • 예외를 처리하기 위한 클래스

    Throwable 클래스를 상속받은 Exception 클래스가 최상위 클래스
    예외 클래스 이름 : xxxException

2) 예외 발생 및 처리 순서

  • 프로그램 실행 중 예외가 발생
  • JVM이 해당 예외에 대한 xxxException 클래스의 객체를 생성하여 프로그램에 던짐
  • 프로그램에서 xxxException 객체를 받아서 처리

3) try~catch~finally 문

  • try 블록 : 예외가 발생할 가능성이 있는 코드
  • catch 블록 : 예외 처리
  • finally 블록 : 예외 발생 여부와 상관없이 실행, 생략해도 됨

4) throws 문

  • 예외를 던지는 명령문
  • throws 문이 정의된 메소드

5) 예외 정보 출력하기

  • printStackTrace() : 예외 발생 메소드의 정보와 위치, 원인을 화면에 출력
  • getMessage() : 예외 발생 원인을 문자열로 반환

2. 입출력 이해하기

1) 입출력 스트림(stream)

  • 데이터의 흐름을 시냇물처럼 물 흐르듯이 처리하는 것
  • 입출력 스트림의 종류

    바이트 입출력 스트림 : 바이트(byte) 단위로 입출력하는 스트림
    문자 입출력 스트림 : 문자 단위로 입출력하는 스트림

  • 입출력 스트림 클래스

    패키지 : java.io
    입력용과 출력용 클래스로 나누어져 있음

2) InputStream/OutputStream

  • 표준 입출력 스트림

    표준 입력 : System 클래스의 in 멤버변수(필드)
    표준 출력 : System 클래스의 out 멤버변수(필드)

3) FileInputStream/FileOutputStream

  • File 클래스 : 파일을 접근하기 위한 클래스
  • FileInputStream/FileOutputStream : File 클래스의 객체를 이용하여 스트림 객체를 생성함

4) BufferedInputStream/BufferedOutputStream

  • 버퍼가 있는 입출력 스트림

5) DataInputStream/DataOutputStream

  • 기본 자료형을 입출력 할 수 있는 스트림

6) ObjectInputStream/ObjectOutputStream

  • 객체 직렬화가 가능한 클래스의 객체를 입출력 할 수 있는 스트림

7) PrintStream

  • 텍스트 기반으로 출력하는 스트림 클래스

3. 실습

1) 저장할 파일 이름을 입력 받으시오
2) 키보드에서 입력 받는 문자열들을 파일로 저장하시오
-'x'또는 'X'가 입력되면 입력 종료
3) 입력이 종료되면 파일에 저장하시오
4) 저장된 파일에서 읽어와 화면에 내용을 출력하시오

package kbdfile;
import java.io.*;

public class KbdFile {
	BufferedReader kbd; // 키보드 입력
	String saveName;	// 저장할 파일이름

	public KbdFile() {
		Reader r = new InputStreamReader(System.in);
		kbd = new BufferedReader(r);
	}
	public void readName() {
		System.out.print("저장할 파일이름을 입력하세요 : ");
		try {
			saveName = kbd.readLine();
			saveName = new String(saveName).trim();
		} catch(IOException e) {
			System.out.println("저장할 파일이름을 입력받는 중 에러가 발생했습니다.");
			e.printStackTrace();
		}
	}

	public void readSaveData() {
		String line = "";
		System.out.println("저장할 데이터를 입력하세요~종료(x,X)");
		try {
			File f = new File(saveName);
			PrintWriter save = new PrintWriter(f);

			while( (line = kbd.readLine()) != null ) {
				if( line.equals("x") || line.equals("X")) break;
				save.println(line);
			}
			save.flush();
			save.close();
			System.out.println(saveName+ " : 저장 성공!! ");
		} catch(IOException e) {
			System.out.println("저장할 데이터를 입력받는아 저장하는 중 에러가 발생했습니다.");
			e.printStackTrace();
		}
	}
	public void readFile() {
		System.out.println(saveName + " : 읽어오기");
		String line = "";
		try {
			File f = new File(saveName);
			FileReader fr = new FileReader(f);
			BufferedReader file = new BufferedReader(fr);
			while( (line = file.readLine()) != null ) {
				System.out.println(line);
			}
			file.close();
			fr.close();
		} catch(IOException e) {
			System.out.println("파일에서 데이터를 읽어오는 중 에러가 발생했습니다.");
			e.printStackTrace();
		}
	}
	public void closeStream() {
		try {
			kbd.close();
		} catch(IOException e) {
			System.out.println("키보드 스트림 닫기 중 에러가 발생했습니다.");
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		KbdFile kf = new KbdFile();
		kf.readName();
		kf.readSaveData();
		kf.readFile();
		kf.closeStream();
	}

}

<Result>


	저장할 파일이름을 입력하세요 : abc.txt
	저장할 데이터를 입력하세요~종료(x,X)
	자바 프로그래밍
	Java Programming
	x
	abc.txt : 저장 성공!!
	abc.txt : 읽어오기
	자바 프로그래밍
	Java Programming
profile
DataEngineer Lee.

0개의 댓글