입출력(IO)

류정훈·2022년 12월 30일
0

학습내용

목록 보기
11/15

Io 정의

Input과 Output의 약자, 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 주고 받는 것
장치와 입출력을 위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을 사용하기 위해 입출력 데이터를 처리할 공통적인 방법으로 스트림 이용

input : 입력
-> 외부에서 내부로 값이 들어오는것
output : 출력
-> 내부에서 외부로 값이 나가는것

        //파일 출력
		FileOutputStream fos = null;
		
		//FileOutputStream fos = new FileOutputStream("test.txt");
		// Unhandled exception type FileNotFoundException
		// => FileOutputStream 객체 생성 시
		// FileNotFoundException 예외가 발생할 가능성이 있다 -> 예외처리
		try {
			fos = new FileOutputStream("test1.txt");
			// 현재 프로그램에서
			// test1.txt파일로 출력하는 통로 객체 생성
			
			// 이 파일은 목적지가 필요
			// -> 12_IO 지금 해당된 프로젝트 폴더가
			// 기본 목적지로 설정되어있음
			
			// 파일에 "hello" 내보내기
			String str = "Hello";
			
			for(int i =0; i < str.length(); i++) {
				
				//System.out.println(str.charAt(i));
				
				// "Hello"를 한 문자씩 끊어서 파일로 출력하기
				
				fos.write( str.charAt(i) );
				// Unhandled exception type IOException
				// write() 는 IOException을 발생시킬 가능성이 있다
				
			}
			
		}catch(IOException e) {
			// FileNotFoundException은 IOException의 자식
			// 다형성 적용해서 IoException 하나로 둘 다 잡을수 있음
			System.out.println("예외 발생");
			e.printStackTrace(); //예외 추적
		} finally {
			// 예외가 발생 하던말던 무조건 수행
			
			// 쓸데없는 통로 지우기
			// --> 자원 반환
			
			//사용한 스트림(통로 없앰)--> 필수작성
			// 프로그램 메모리 관리 차원에서 항상 다쓰면 끊어줌
			// -> 작성 안하면 문제점으로 꼽을 수 있음
			
			try {
				fos.close(); // 예외 발생하여 try catch 구문으로 한번 더 작성
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
//파일입력
FileInputStream fis = null;
		
		try {
			fis = new FileInputStream("text1.txt");
			
			// FileInputStream은 1바이트씩만 읽어올 수 있음
			
			while(true) {
				int data = fis.read(); // 다음 1바이트를 읽어오는데 정수형
							// 다음 내용이 없으면 -1을 반환
				if(data == -1) {// 다음 내용 없음 = >종료
					break;
				}
				// 반복 종료가 안됐으면 char로 강제 형변환하여 문자로 변환
				System.out.println((char)data );
				
			}
			
		}catch(IOException e) {
			e.printStackTrace();
		}finally {
			
			try {
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
profile
It works...why?

0개의 댓글