본문 바로가기
IT/JAVA

[Java] I/O 2(입출력) (java.io) - reader Class(reader, fileReader, bufferedReader)

by 행복한 용용이 2020. 11. 11.
반응형

ReaderTest.java

 

     package com.kitri.io;

     import java.io.*;

     public class ReaderTest {

          public static void main(String[] args) {

                    Reader in = null;

          try //~Reader : Character Stream (byte가 아닌 문자)

                    in = new InputStreamReader(System.in); //콘솔창에서 읽어올 때 : System.in

                    char c[] = new char[100];

                    System.out.println("입력 : ");

                    int x = in.read(c);

                    System.out.println("x === "+ x); //x==문자 수 +\r\n (원래 enter는 \r\n)

                    String str = new String(c,0,x-2)

                    //그냥 c 하면 입력한 문자+나머지 칸들 총 100칸 출력됨. 따라서 0~x-2까지만 출력하기

                    System.out.println(str);

 

                    int len = c.length;

                    for (int i = 0; i < len; i++) {

                         System.out.println(c[i]);

                    }

 

               } catch (IOException e) {

                    e.printStackTrace();

               }

          }

     }

 


출력은 print(String s) 처럼 String을 출력하는 method 있다.

하지만 입력은 String 입력받는 method가 없다.

BufferedReader class에 readLine() method 있다.


FileReader

 

     package com.kitri.io;

 

 

     import java.io.*;

 

 

     public class FileReaderTest {

          public static void main(String[] args) {

 

               //fileInputStream의 character 형태 FileReader ..??

               //FileReader에는 method 없어서 상위 class의 inputStreamReader

 

               FileReader fr = null;

               FileWriter fw = null;

               try {

                    File infile = new File("e:\\iotest\\hello.txt");

                    fr = new FileReader(infile);

                    long length = infile.length();

                    char c[] = new char[(int) length];

                    int x = fr.read(c); System.out.println(x + "characters read !!!");

                    String str = new String(c);

                    System.out.println(c);

 

                    File outfile = new File("e:\\iotest\\hello_copy2.txt");

                    fw = new FileWriter(outfile);

                    //Write class에는 write(String str) method가 있다.

                    fw.write(str); //여기까지만 하면 파일만 생성되고 아무것도 안됨. 닫질않아서

               } catch (FileNotFoundException e) {

                    e.printStackTrace(); // 이건 왜쓰는거지?

               } catch (IOException e) {

                    e.printStackTrace();

               } finally {

                    try {

                         if(fw!=null)

                              fw.close();

                         if(fr!=null)

                              fr.close();

                    } catch (IOException e) {

                         e.printStackTrace();

                    }

               }

 

          }

     }


BufferedReader

 

     package com.kitri.io;

 

 

     import java.io.*;

 

 

     public class BufferedReaderTest {

          public static void main(String[] args) {

               BufferedReader fin = null;

               //입력은 문자열로 받아올 수 있는게 BufferedReader밖에 없음

               FileWriter fw=null;

               // 출력은 문제없음.FileWriter 써도 됨

               //BufferedReader 에는 String값으로 Read 할 수 있다.

               //따라서 byte나 char 값으로 read 하는거 잘 안씀

 

               //BufferedReader 쓰려면 InputStream과 Reader,BufferedReader 순으로 해야함

               // InputStream is = System.in;

               // Reader r= new InputStreamReader(is);

               // BufferedReader in = new BufferedReader(r);

 

               try {

               //위의 세줄을 한줄로 줄이면

               //system에서 읽어오는것

                    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

               System.out.println("읽을 파일 이름 : ");

               String infile = in.readLine();

               System.out.println("infile =="+infile);

               //readline는 enter를 기준으로 enter전까지만 읽는다. 따라서 enter 포함 안됨

 

               System.out.println("복사할 파일 이름 : ");

               String outfile = in.readLine();

               fw= new FileWriter(new File(outfile));

 

               //file에서 읽어오는 것

               fin = new BufferedReader(new InputStreamReader(new FileInputStream(new File(infile))));

               //file 처음부터 끝까지 읽어와야하는데 readline은 엔터전까지만 읽어옴

               //따라서 파일이 끝날때 까지 계속 한줄씩 읽어오도록 while문을 써야함.

 

               String str = null;

               while((str = fin.readLine())!=null) {

                    System.out.println(str);

                    fw.write(str+"\r\n");

                    //읽어오는것이 엔터 전까지만 읽어온다

                    //따라서 그대로 write하면 엔터 없이 쭉 한줄로 붙이게 된다.

                    //그러므로 꼭 \r\n을 붙여준다.

               }

 

               //src\\com\\kitri\\io\\FileTest.java 라고 치면

               //현재 경로인 bin에서 쓴 경로로 들어가서 file 읽어옴

               //e:\\iotest\\hello.txt 라고 치면

               //쓴 경로의 hello.txt 파이 읽어옴

 

          } catch (IOException e) {

               e.printStackTrace();

          } finally {

               try {

                    if(fw!=null)

                         fw.close();

                    if(fin!=null)

                         fin.close();

               } catch (IOException e) {

                    e.printStackTrace();

               }

          }

 

     }

}

 

 

[출처] 빡쏘끼룩

반응형