12_IO

김정욱·2022년 12월 30일
0

JAVA 복습

목록 보기
14/15
post-thumbnail
post-custom-banner

< 입출력 >

1. 입출력(IO)

1) 입출력

  • input과 output의 약자. 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 주고 받는 것
  • 입출력 데이터를 처리할 공통적인 방법으로 스트림 이용

2) 스트림(Stream) 클래스

  • 모든 스트림은 단방향이며 각각의 장치마다 연결할 수 있는 스트림 존재
  • 단방향이기 때문에 입출력을 동시에 하려면 2개의 스트림이 필요

3) InputStream

  • 바이트 기반 입력 스트림의 최상위 클래스로 추상클래스이다

4) OutputStream

  • 바이트 기반 출력 스트림의 최상위 클래스로 추상클래스이다

5) Reader

  • 문자 기반 입력 스트림의 최상위 클래스

6) Writer

  • 문자 기반 출력 스트림의 최상위 클래스

7) 사용예시

  • 파일로 사용하려는 프로젝트에서 새로만들기 하여 General 폴더의 file을 만들어준다
< 바이트 기반 OutputStream >
-----------------------------------------------------------------
// FileOutputStream fos = new FileOutputStream("test1.txt");
// 이렇게 하면 FileNotFoundException 예외 발생. 예외 처리 필요
// -> 파일로 만들어지기 전에 예외발생하여 종료 될 수 있다는 예외

FileOutputStream fos = null;

try {
	fos = new FileOutputStream("test1.txt");
    // 현재 프로그램에서 test1.txt 파일로 출력하는 통로 객체 생성
    // 이 파일은 목적지가 필요하고 현재 현재 해당 12_IO 프로젝트 폴더가 기본 목적지로 설정

    String str = "Hello";

    for( int i = 0; i < str.length(); i++){
    	fos.write(str.charAt(i));
        // write는 IOException을 발생. 예외처리 필요
    }
} catch (IOException e){
	// FileNotFoundException은 IOException의 자손이므로 
    // 다형성에 의해 IOException로 둘 다 잡을 수 있다

    e.printStackTrace(); // 예외 추적 후 출력
} finally {
	// 쓸데없는 통로 지우기, 메모리 관리 차원 --> 필수작성
    try{
    	fos.close();
        // 통로 닫는 메소드도 예외 발생하므로 예외처리 해주기
	} catch (IOException e) {
    	e.printStackTrace();
	}       
< 바이트 기반 InputStream >
-----------------------------------------------------------------
FileInputStream fis = null;

try {
	tis = new FileInputStream("test1.txt");

    // FileInputStream은 1byte씩만 읽어올 수 있다
    while(true){

    	int data = fis.read();
    	// 다음 1byte를 읽어오는 정수형 반환타입의 메소드. 유니코드 정수
    	// 다음 내용이 없으면 -1 반환
    	if( data == -1 ) break;

    	System.out.print( (char)data );
    }
} catch ( IOException e ) {

    e.printStackTrace();

} finally {

	try {
		fis.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}    
< 문자 기반 OutputStream >
-----------------------------------------------------------------
FileWriter fw = null;

try {
	fw = new FileWriter("test1.txt");
    // 매개변수로 true를 추가하면 실행한만큼 연속으로 작성된다. ("test1.txt", true);

    String str = "안녕하세요. Hello. 1234. !#";

    fw.write(str);

} catch ( IOException e ) {

    e.printStackTrace();

} finally {

	try {
		fw.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
} 
< 문자 기반 InputStream >
-----------------------------------------------------------------
FileReader fr = null;

try {
	fr = new FileReader("test1.txt");

    while(true){

    	int data = fr.read();
        // 다음 문자 읽어옴. 없으면 -1
    	if( data == -1 ) break;

    	System.out.print( (char)data );
    }
} catch ( IOException e ) {

    e.printStackTrace();

} finally {

	try {
		fr.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}  
profile
절박한 마음을 갖고 하루를 보내자!!
post-custom-banner

0개의 댓글