[Java-I/O 2] 파일 입출력

이용준·2022년 11월 3일
0

Java

목록 보기
22/29

파일을 이용한 입출력 방법에 대해 알아보자.

[순서]
1. 파일 쓰기
1. FileOutputStream
2. FileWriter
3. PrintWriter
4. 파일에 내용 추가하기
2. 파일 읽기

1.파일 쓰기

다음 예제를 작성해 보자.

import java.io.FileOutputStream;
import java.io.IOEXception;

public class Sample{
  public static void main(String[] args) throws IOException{
    FileOutputStream output = new FileOutputStream('./out.txt');
    output.close();
  }
}  

위 예제를 실행하면 현재 디렉터리 하위에 새로운 파일output.txt이 하나 생성된다

1-1. FileOutputStream

이번에는 생성하는 파일에 내용을 적어보자.

import java.util.FileOutputStream;
import java.io.IOException;

public class Sample{
  public static void main(String[] args) throws IOException{
    FileOutputStream output = new FileOutputStream("./out.txt");
    for(int i=1; i<11; i++){
      String data=i+" 번째 줄 작성중.\r\n";
      output.write(date.getBytes()); //**작성
    }
    output.close();
  }
}

*\r - 개행문자(커서 위치를 현재 줄의 맨 앞으로 이동)
*\n - 커서를 다음 줄로 이동
* 유닉스의 경우 \n만 있으면 된다.

OutputStream 역시 바이트 단위로 데이터를 처리하는 클래스이다. FileOutputStream은 OutputStream 클래스를 상속받아 만든 클래스이며, 바이트 단위로 데이터를 처리하게 되어 있다.

FileOutputStream에 값 입력시 byte배열로 입력해야 하므로 String을 byte 배열로 변경하는 getByte()메서드 사용.

1-2.FileWriter

문자열을 파일로 작성시 String을 byte로 변환해야 하므로 불편함이 생긴다. 이를 해결하기 위한 예제를 보도록하자.

import java.io.FileWriter;
import java.io.IOException;

public class Sample{
  public static void main(String[] args) throws IOException{
    FileWriter fw = new FileWriter("./out.txt");
    for(int i=1; i<11; i++){
      String data = i+" 번째 줄입니다.\r\n";
      fw.write(data);
    }
    fw.close();
  }
}
  • FileOutputStream은 입력에 byte 배열 입력

  • FileWrtier를 이용하면 byte배열 대신 문자열 사용 가능

  • 대신 FileWriter는 \r\n 개행문자 입력 필요

    1-3.PrintWriter

    import java.io.Printwriter;
    imoprt jaba.io.IOException;
    
    public class Sample{
      public static void main(String[] args) throws IOException{
        PrintWriter pw = new PrintWriter(./"txt.out"); // 변경
        for (int i=1; i<11; i++){
          String data = i+" 번째 줄 작성중\r\n";
          pw.write(data); // 변경-
        }
        pw.close();
      }
    }  
  • PrintWriter는 개행문자 불필요

  • System.out 대신 println메서드 사용

    1-4.파일에 내용 추가

  • 추가 모드
    1.FileWriter

    (...)
    }
      fw.close();
    
      FileWriter fw2 = new FileWriter("./out.txt",true); // true-파일을 추가모드로 연다
      for(int i=11; i<21; i++){
        String data=i+" 번째 줄 작성중.\r\n";
        fw2.write(data);
      }
      fw2.close();
     }
    } 
    • fw2 객체의 두번째 파라미터(true)를 추가로 전달해 파일을 추가모드(append)로 재작성.

    2.PrintWriter

    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    (...)
      pw.close();
      
      PrintWriter pw2 = new PrintWriter(new FileWriter()
      for(int i=11; i<21; i++){
        String data = i+" 번째 줄 작성";
        pw2.pritnln(data);
       }
       pw2.close();
      }
    }
    • PrintWriter 사용할 경우 파라미터에 FileWriter의 객체 전달해야 함.

2.파일 읽기

파일을 읽는 방법은 두 가지가 있다.
FileInputStream을 사용해 byte 배열을 이용해 파일을 읽는 것과 BufferedReader를 통해 라인단위로 읽는 방법이다.FileInputStream을 통해 파일을 읽을때는 정확한 길이를 알아야 한다는 단점이 있다.

  • FileInputStream(byte 단위 읽기)

    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class Sample{
      public static void main(String[] args) throws IOExcetpion{
        byte[] b = new byte[1024];
        FileInputStream input = new FileInputStream("./out.txt")'
        input.read(b);  // 텍스트 읽기
        System.out.println(new String(b)); // byte 배열을 문자열로 변경해 출력 (바이트->문자열 변경)
        input.close();
      }
    }  
    • 바이트 배열을 문자열로 변경시 new String(바이트배열) 처럼 변경해 사용
  • BufferedReader(라인 단위 읽기)

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException; 
    
    public class Sample{
      public static void main(String[] args) thrwos IOException{
        BufferedReader br = new BufferedReader(new FileReader("./out.txt");
        while(true){
          String line = br.readline();
          if(line==null) break; // 더 읽을 라인이 없는 경우 while문 정지
          System.out.println(line);
        }
        br.close();
      }
    }  

    간단 정리

  • FileOutputStream - 바이트 단위로 받아온다.

    • String을 byte배열로 변경하는 getByte()메서드 사용
  • FileWriter - byte배열 대신 문자열 사용 가능

    • \r\n의 개행문자를 덧붙여야 한다.
  • PrintWriter - 문자열 사용 가능

    • \r\n대신 println 메서드 사용 가능
  • 파일에 내용 추가하기

    FileWriter 새로운객체 = new FileWriter("원본파일경로",true) // true - 파일 추가 모드
  • 파일 읽기

    • FileInputStream - byte 단위로 읽어오기
    • BufferedReader - 라인 단위로 읽어오기
profile
뚝딱뚝딱

0개의 댓글