▶문자 단위 스트림
자바에서 스트림은 기본적으로 바이트 단위로 데이터를 전송하는데 1바이트씩 전송되는 바이트 기반 스트림으로는 원활한 처리가 힘들다. 따라서 JAVA에서는 문자 기반의 스트림인 char 형 2바이트씩 입출력이 가능한 기능을 제공한다.
Reader (입력) FileReader |
int read() | 해당 입력 스트림으로부터 2바이트씩 읽어서 int 로 반환한다 |
int read(char[ ] ch) | 파라미터로 넣은 배열 크기 만큼을 읽어들인 후, 배열 ch에 저장한다. 그 후 읽은 문자수를 반환한다. |
|
int read(char[ ] ch, int off, int size) | size 바이트를 읽어들인 후, 배열에 저장한다. 저장 시작 위치는 ch[off]부터이며 읽은 문자수를 반환한다. |
|
Writer (출력) FileWriter |
void write(int ch) | 해당 출력 스트림에 문자 한개를 출력한다 |
void write(char[ ] ch) | 배열 ch 크기만큼의 문자를 배열 요소에 담아 출력한다 | |
void write(char[ ] ch, int off, int size) | 배열 ch의 off 위치부터 size 크기만큼을 출력한다. | |
void write (String str) | 문자열 ( String ) 출력한다. |
● Reader 를 사용하여 FileReader 객체를 생성하여 int read(char[ ] ch) 형태로 입력 값을 받아오기 예제
package 입출력;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class 문자입출력연습1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileReader fr = new FileReader("src/입출력/files/a.txt");
char[] buf = new char[10];
int size;
while ((size = fr.read(buf)) > 0) {
System.out.println(new String(buf));
Arrays.fill(buf, ' ');
}
fr.read();
fr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[ try 내부 구문 설명 ]
① FileReader fr = new FileReader("src/입출력/files/a.txt);
문자 단위의 입출력 객체 생성. ( ) 안에는 파일의 경로를 표시해 준다.
② char [] buf = new char [10];
buf 라는 이름의 길이가 10인 문자 배열을 생성. 이것 역시 공백도 1개의 문자로 취급한다. 이 배열은 파일에서 읽어드린 데이터를 저장할 때 사용 될 예정이다.
③ int size;
size 라는 이름의 변수를 선언하고 이 변수는 파일에서 읽어드린 데이터의 크기를 측정 할 때 사용된다.
④ while ((size=fr.read(buf))>0)
buf 배열을 파라미터로 받아 read 읽을 건데, 그 읽은 값을 size 에 저장한다. 그 후 그 값이 0보다 클 경우에는 실행문을 계속 실행 한다.
⑤ System.out.println(new String (buf));
new String 은 buf 배열의 모든 요소를 새로운 문자열로 생성하는 생성자이며 이걸 print 하여 결과를 보여준다.
⑥ Arrays.fill(buf, ' ' );
배열 속에 저장 된 문자들이 곂칠 수가 있으니 루트 하나를 돌았다면 해당 배열을 공백으로 변경해주어 다음 루프에 피해가 가지 않도록 변경 해준다.
● Writer 를 사용하여 FileWriter 객체를 생성하여 void write (String str) 형태로 출력 값을 받아오기 예제
package 입출력;
import java.io.FileWriter;
import java.io.IOException;
public class 문자입출력연습2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileWriter fw = new FileWriter("src/입출력/files/d.txt");
//이제 말하면 입만 아픈 객체생성
String str = "hello java fileWriter";
for (int i = 0; i < str.length(); i++) {
fw.write(str.charAt(i));
}
fw.write("\n");
fw.write(str);
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[ try 내부 구문 설명 ]
① String str = "hello java fileWriter" ;
String 클래스의 인스턴스를 참조하는 변수 str 에 "hello java fileWriter" 문자열을 할당한다.
② for(int i =0; i<str.length();i++)
값이 저장 되어 있는 변수 str의 길이만큼 루프를 돌면서
③ fw.write(str.charAt(i));
출력을 할껀데, charAt 은 파라미터 안의 문자열 한개만 반납하는 향수이다. 여기에서는 루프를 도는 i 번째 문자열을 한개씩 반납하여 출력한다.
④ fw.write("\n"); //줄 바꿈을 출력
⑤ fw.write(str); // 출력 문자를 제일 간단하게 할 수 있는 방법
⑥ fw.close(); // 항상 모든 입출력이 끝나면 닫아주기
'JAVA' 카테고리의 다른 글
[JAVA] 입출력 스트림 ④ 보조스트림 _ Object (0) | 2023.03.13 |
---|---|
[JAVA] 입출력 스트림 ④ 보조스트림 _ Buffered (0) | 2023.03.13 |
[JAVA] 입출력 스트림 ② 바이트 단위 스트림 _ 출력 (0) | 2023.03.11 |
[JAVA] 입출력 스트림 ② 바이트 단위 스트림 _ 입력 (0) | 2023.03.10 |
[JAVA] 입출력 스트림 ① 표준 입출력 (0) | 2023.03.08 |