✨
プログラミング自主学習 DAY76 文字入出力ストリーム
文字入出力ストリーム
Writer/Reader は、文字入出力ストリームの最上位抽象クラスだ。
write(int c)
: 一つの文字を出力。
write(char[] cbuf(int off, int len))
: 配列のすべての文字を出力
write(String str(int off, int len))
: 文字列を出力
WriteExample
import java.io.FileWriter;
import java.io.Writer;
public class WriteExample {
public static void main(String[] args) {
try(Writer writer = new FileWriter("C://tmp/test.txt")){
char a = 'A';
writer.write(a);
char b = 'B';
writer.write(b);
char[] arr = {'C','D','E'};
writer.write(arr);
writer.write("FGH");
writer.flush();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
ReadExample
import java.io.FileReader;
import java.io.Reader;
public class ReadExample {
public static void main(String[] args) {
try(Reader reader = new FileReader("C://tmp/test.txt")){
//1
while(true) {
int data = reader.read();
if(data == -1) break;
System.out.print(data + " -> ");
System.out.println((char)data);
}
System.out.println();
char[] data = new char[100];
while(true) {
int num = reader.read(data);
System.out.println(data);
if(num == -1) break;
for(int i=0; i<num; i++) {
System.out.println(data[i]);
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
//1
65 -> A
66 -> B
67 -> C
68 -> D
69 -> E
70 -> F
71 -> G
72 -> H
//2
ABCDEFGH
8
A
B
C
D
E
F
G
H
ABCDEFGH
InputStreamReader・OutputStreamWriter
byte単位で文字を読むInputStream , OutputStreamに文字を読むReader・Writerを付けることもできる。FileWriter/FileReaderとの違いは、FileWriter/FileReaderはEncodingとDecodingのタイプを選べないが、InputStreamReader, OutputStreamWriterは指定ができるため、より幅広い範囲で活用することができる。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class CharacterConvertStreamExample {
public static void main(String[] args) {
write("문자 변환 메소드를 실행합니다.");
String str = read();
System.out.println(str);
}
public static void write(String str) {
try(OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C://tmp/test.txt"),"UTF-8")){
osw.write(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String read() {
char[] data = new char[100];
StringBuilder sb = new StringBuilder();
try(InputStreamReader isr = new InputStreamReader(new FileInputStream("C://tmp/test.txt"))){
int num;
while((num = isr.read(data)) != -1) {
sb.append(data,0,num);
}
}
catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}
Discussion