JAVA 파일 생성 바이트 단위 FileOutputStream 사용 방법

Java에서 바이트 단위로 데이터를 파일에 출력하고 싶은 경우 FileOutputStream 클래스를 사용합니다.

문자열을 파일에 출력하고 싶은 경우에는 FileWriter클래스를 사용합니다.

FileWriter클래스 사용 방법에 대해서는 아래 내용을 참조해주세요.

링크링링크

 

FileOutputStream 클래스 생성 방법은 다음과 같습니다.

FileOutputStream file = new FileOutputStream(“결고/파일 이름”);

 

OutputStream클래스는 바이트로 파일에 출력하는 FileOutputStream클래스의 슈퍼 클래스입니다.

파일에 쓰기 위한 write메서드 등은 OutputStream클래스에 준비되어 있는 메서드지만 FileOutputStream클래스는 OutputStream클래스를 계승하고 있기 때문에 사용을 할 수 있습니다.

 

샘플을 보면서 FileOutputStream 사용방법을 알아보겠습니다.

import java.io.FileOutputStream;
import java.io.IOException;
 
public class Main {
 public static void main(String[] args) throws IOException {
  
  // FileOutputStream클래스 오브젝트를 생성
  FileOutputStream fos = new FileOutputStream("/temp/java.txt");
  
  byte b1 = 74; //ASCII:(J)
  byte b2 = 65; //ASCII:(A)
  byte b3 = 86; //ASCII:(V)
  byte b4 = 65; //ASCII:(A)
  
  fos.write(b1);
  fos.write(b2);
  fos.write(b3);
  fos.write(b4);
  
  // 파일에 출력
  fos.flush();
  
  // 파일을 닫음
  fos.close();
 
 }
}

 

샘플에서는 FileOutputStream클래스 객체에 경로/파일 이름을 지정해 생성하고 있습니다.

생성한 FileOutputStream의 객체에 write메서드를 사용하여 입력 데이터를 버퍼에 저장합니다.

마지막으로 close메서드에서 파일을 닫습니다.

FileOutputStream클래스에서는 byte형 데이터만 출력되고 문자열을 파일에 쓸 수 없습니다.

문자열을 파일에 쓰고 싶은 경우에는 바이트형 배열로 반환해주는 getBytes를 사용할 수 있습니다.

 

샘플을 보겠습니다.

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
 
public class Main {
 public static void main(String[] args) throws IOException {
  
  // FileOutputStream클래스 객체를 생성
  FileOutputStream fos = new FileOutputStream("/temp/java.txt");
  
  byte sbyte[] = "Java".getBytes(StandardCharsets.UTF_8);
  
  for(int i = 0; i < sbyte.length; i++){
   fos.write(sbyte[i]);
  }
  
  // 파일에 출력
  fos.flush();
  
  // 파일을 닫음
  fos.close();
 
 }
}

 

getBytes를 사용해 문자열로 출력이 가능합니다.

기존 파일에 추가로 문자를 쓰고 싶은 경우에는 FileOutputStream 클래스를 생성할 때 두 번째 파라미터를 설정합니다.

FileOutputStream file = new FileOutputStream(“경로/파일 이름”, true);

 

위에서 작성한 샘플 코드에서 두 번째 파라미터를 설정해 실행하면 파일에 데이터가 추가되는 것을 확인할 수 있습니다.

마지막으로 파일에 데이터를 작성할 때 주의점을 확인해보겠습니다.

FileOutputStream클래스뿐만 아니라 파일 관련 클래스에서 존재하지 않는 경로/파일명을 지정하면 FileNotFoundException 에러가 발생합니다.

파일 처리를 할 때에는 지정한 패스와 파일 이름이 존재하는지 체크하는 것이 좋습니다.

존재 체크를 하는 방법으로 File클래스의 exists메서드를 사용하여 파일이 존재하는지 확인할 수 있습니다.

 

파일 존재 체크를 확인하고 작성하는 샘플을 보겠습니다.

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Main {
 
 public static void main(String[] args) throws IOException {
  
  // FileOutputStream클래스 객체를 생성
  File file = new File("/temp/java.txt");
  
  // 파일의 존재 여부를 확인 
  // 파일이 존재하는 경우
  if (file.exists()){
      FileOutputStream fos = new FileOutputStream(file);
   
      byte b1 = 74; //ASCII:(J)
      byte b2 = 65; //ASCII:(A)
      byte b3 = 86; //ASCII:(V)
      byte b4 = 65; //ASCII:(A)
      
      fos.write(b1);
      fos.write(b2);
      fos.write(b3);
      fos.write(b4);
  
      // 파일에 출력
      fos.flush();
      
  // 파일이 존재하지 않는 경우
  } else {
      System.out.println(file.toString() + "파일이 존재하지 않습니다.");
  }
  
  // 파일을 닫음
  fos.close();
  
  }
}

 

FileNotFoundException에러는 파일이 읽기 전용인 파일에 작성하려고 할 때도 발생하니 주의해야 합니다.

댓글