プログラミング自主学習 DAY76 文字入出力ストリーム

2023/08/11に公開

文字入出力ストリーム

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