JAVA

[JAVA]입출력( I / O ) #2

로돌씨 2024. 2. 26. 06:24

char 타입

 

예제

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

public class TestCharStream {
	public void fileSave() {
		FileWriter fw = null; // 래퍼런스 변수선언 (import FileWriter)
		// filewWriter fw = new filwriter를 사용하면 트라이구문안에서만 fw가
		// 작용하기때문에 먼저 변수선언을 해줌

		try {
			fw = new FileWriter("sample.txt");

			fw.write("안녕하세요. 월요일 아침입니다.");
			// sample 텍스트파일에 입력됨.
			// byte단위로 한글을 치면 깨짐
			fw.write('A'); // 자동으로 int로 형식이 바뀜(유니코드 65)
			fw.write(' ');
			char[] carr = { 'a', 'p', 'p', 'l', 'e' };
			fw.write(carr); // 이렇게 배열로 만들어도 잘 저장됨
		} catch (IOException e) {
			e.printStackTrace();// 에러메세지 출력
		} finally {// 예외가생기던지 문제가없던지 실행
			try {
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	public void fileOpen() {
		FileReader fr = null;
		try {
			fr = new FileReader("sample.txt");// 먼저 만들어주고 트라이캐치만들어줌

			// for(int i=0; i<100 ; i ++) {
			// try {
			// System.out.println(fr.read());
			int val = 0;
			while ((val = fr.read()) != -1) {
				System.out.println((char) val); // 파일을 찾아서 읽어오는 구문 (하나하나씩 읽어옴 )
			}
		} catch (FileNotFoundException e) {

			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

출력

public class Run {

	public static void main(String[] args) {
		TestCharStream tc = new TestCharStream();
		tc.fileSave();
		tc.fileOpen();

	}

}출력값:
안
녕
하
세
요
.
 
월
요
일
 
아
침
입
니
다
.
A
 
a
p
p
l
e

 

보조Stream 
입출력 대상이 되는 파일이지만 직접 네트워크를 읽거나 쓰는 기능은 존재하지않음 ,
말 그대로 보조 기능을 추가하는 스트림 -> 다른 스트림을 감싸고 있다는 뜻에서 Wrapper Stream 이라고도 부름

 

예제

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 TestBuffer {
	public void filesave() {
		FileWriter fw = null;
		BufferedWriter bw = null;// 빠르게 출력을 해보자!
		// 객체 생성 (기반 , 보조 )
		try {
			// fw = new FileWriter ("sample2.txt");
			// bw = new BufferedWriter(fw);
			// 위에것은 너무 기니깐 한줄로
			bw = new BufferedWriter(new FileWriter("sample2.txt"));
			// 보조 =new 보조스트림(new 기반스트림(외부자원));

			bw.write("안녕하세요\n");
			bw.write("반갑습니다.\n"); // \n은 띄어쓰기
			bw.write("안녕하세요.\n");
			// 이렇게만하면 텍스트에 아무것도 안뜸
			// bw.flush(); // 이것까지 해주어야 잘 뜸
			// 트라이캐치 구문에 finally 에 bw.close 를 하면자동으로 플러쉬가됐었음

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	public void fileopen() {

		try (BufferedReader br = new BufferedReader(new FileReader("sample2.txt"));) {
			//선언과 동시에 할당 트라이구문까지 한번에
			//br.readLine(); 하나하나 읽는게 아닌 한줄 다 읽어옴
			String val = null;
			while( ( val = br.readLine())!= null ) { // null이아닐때 다 출력을 하자! (스트링값이기때문에 null ,정수값이라면 -1)
			
				System.out.println(val); // 출력해주는 구문
			}
					
		} catch (FileNotFoundException e) {
	
			e.printStackTrace();
		} catch (IOException e1) {
		
			e1.printStackTrace();
			// 바로선언 할당
		}
	}// 보조스트림은 문자단위인데 기반스트림은 바이트 단위일 경우에는 단위 형변환해주는게 필요함
	
}

 

출력

public class Run {

	public static void main(String[] args) {
		TestBuffer tb = new TestBuffer();
		//tb.filesave();
		tb.fileopen();

	}

}출력값:
안녕하세요
반갑습니다.
안녕하세요.

 

변경스트림

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TestChange {
	public static void main(String[] args) {
		TestChange tc = new TestChange();
		// tc.input();
		// tc.output();
	}

	// 기반과 보조의 크기가 다를경우 사용하는 보조스트림
	public void input() {
		// 보조스트림 보조 = (new보조(new기반("외부자원")));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		try {
			System.out.print("문자열 입력: "); // 큰 의미없지만 일단 묶어줌
			String Value = br.readLine();

			System.out.println("Value: " + Value);

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void output() {
		// 콘솔창에출력하기
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 출력이기때문에 시스템 아웃

		try {
			bw.write("java dbms jdbc");
			bw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}출력값:
문자열 입력: java
Value: java
java dbms jdbc

'JAVA' 카테고리의 다른 글

[JAVA]Thread  (0) 2024.03.05
[JAVA] Collection(List , set , Map)  (1) 2024.02.27
[JAVA]입출력( I / O )  (0) 2024.02.22
[JAVA]예외처리  (0) 2024.02.22
[JAVA]객체#3  (0) 2024.02.21