lec01-Java I/O #4 File Reader 과 File Writer

2015. 1. 14. 16:11 - 에릭투스
네번째 강의 입니다!! 잉?? 또 Reader/Writer?? 하실분이 있겠지만 이번엔 파일입니다!!
이미 느끼신분도 계시겠지만, InputStream/OutputStream이 있다면, 그에 대응하는 Reader/Writer가 있습니다.

차이점은 익히 아시는대로, byte 단위로 처리하느냐! char 단위로 처리하느냐
따라서, 이 차이점을 항상 기억하시면서 공부하시면 큰 도움될듯합니다!!

추가로 똑똑하신 분들을 위해 추가하자면 보통 1바이트 언어(영어) 위주로 개발되어, 2바이트언어(한글, 중국어 등등)가 개발되기 때문에
InputStream/OutputStream에 대응되는게 없다면 어떻게 할까요!!?? (이전에 살짝 배웠는데...ㅎㅎ)

바로 InputStreamReader / OutputStreamWriter를 사용하시면 됩니다!!
이 두 객체는 2바이트단위로 처리하는 Reader와 Writer 객체이지만
InputStream, OutputStream의 1바이트 처리를 변환해주는 역할을 하기때문에 기억해두시면 도움이 많이 됩니다!!


그럼 소스 설명을 간단히 해볼까요?
이제 안해도 아신다구요...? 알겠습니다..전 이만...

ㅎㅎ 이제 패턴이 익숙하시죠?
I/O가 어렵게 느껴지지만, 사실 패턴이 많이 비슷합니다..

Reader로 끝나게 되면 처리되는 데이터는 char타입..
read함수를 통해 읽은 바이트 수와 char배열을 통해 String형태로 변환..
출력~~ 끝~~~

public static void fileReaderExample(){
		String fileName = "file"+File.separator+"korean.txt";
		
		int read = 0;
		char[] buffer = new char[512];
		
		try(FileReader reader = new FileReader(fileName)){
			while((read=reader.read(buffer, 0, buffer.length))!=-1){
				System.out.println(new String(buffer,0,read));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
}


마찬가지로 출력 부분에 대한 예제입니다~ 이전 예제와 비슷하게 준비했는데요~
Scanner 유틸 클래스를 이용해 사용자에게 값을 입력받은 후
FileWriter를 통해 file폴더안에 client.txt에 입력하는 단순한 예제에용~
오늘은 휘곤휘곤 하니 이정도로 마무리~~~

public static void fileWriterExample(){
		String fileName = "file"+File.separator+"client.txt";
		
		Scanner scan = new Scanner(System.in);
		try (FileWriter writer = new FileWriter(fileName)){
			while(true){
				System.out.println("입력해주세요. *exit 종료");
				String text = scan.nextLine();
				
				if("exit".equals(text)){
					break;
				}
				writer.write(text);
				writer.write(System.lineSeparator());
				writer.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
}

다른 카테고리의 글 목록

자바 기본 공부/네트워크 개발 카테고리의 포스트를 톺아봅니다