본문 바로가기
Back-end/JAVA & Spring

[Java] java.io.FileOutputStream 주요 메소드

by 꼬바리 2021. 5. 11.

[ FileOutputStream ]

  • FileInputStream과 마찬가지로 java.io의 가장 기본이 되는 파일 입출력 클래스
  • 출력 스트림(통로)을 생성해줌
  • 사용법은 간단하지만, 버퍼를 사용하지 않기 때문에 느림
  • 속도 문제를 해결하기 위해 버퍼를 사용하는 다른 클래스와 같이 쓰는 경우가 많음
외부 리소스 입출력에 대한 개념과 설명은 아래 링크글을 참조하시면 됩니다.

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_io / nio / nio2 [1/3]

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_java.io [2/3]

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_java.nio [3/3]

 

 


[ 생성자 ]

  • new FileOutputStream(File file)
  • new FileOutputStream(FileDescriptor jdObj)
  • new FileOutputStream(String name)
  • new FileOutputStream(File file, boolean append) - 추가모드
  • new FileOutputStream(String name, boolean append) - 추가모드

기본적으로 입력 스트림 생성과 동일하지만, true 인자를 추가로 전달하면 추가모드(append 모드)로 파일을 열어 가장 뒷부분부터 추가로 입력해주게 됩니다. 추가 모드가 아닐 때는 기존 파일의 내용은 모두 지워지고 새롭게 덮어쓰게 됩니다. 모드를 잘 못 쓰면 실행하는 순간 원본 파일의 내용이 모두 사라질 수 있으므로 주의해야 합니다.

 


 

[ void write() ]

  • void write(int b) : 매개변수로 전달받은 정수를 문자로 출력
  • void write(byte[] b) : 매개변수로 전달받은 배열의 내용을 문자로 출력
  • void write(byte[] b, int off, int len) : 배열의 'off' 인덱스부터 'len' byte 만큼 읽어서 문자로 출력

package study.first;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Main {
	public static void main(String[] args) {
		
		byte[] arr = new byte[20];
		
		// 파일 열기 (해제 자동, try-with-resources)
		// input.txt : "Hello World..!!"
		try (FileInputStream fi = new FileInputStream("input.txt");
				FileOutputStream fo = new FileOutputStream("output.txt")) {
			
			// 1byte를 읽어와서 파일에 문자로 출력
			fo.write(fi.read()); // output.txt에 "H" 출력 
			
			// 남은 문자 배열에 담음
			fi.read(arr);
			
			// 배열에 담긴 내용을 인덱스 0~5범위를 output.txt에 출력
			fo.write(arr, 0, 5); // "ello " 추가

			// 배열에 담긴 내용을 모두 output.txt에 출력
			fo.write(arr);  // "ello World..!!" 추가

		// 예외처리
		} catch (Exception e) {

			System.out.println("실패.");
		}	
	}
}

 

 


[ void close() ]

  • 현재 열려 있는 파일을 닫음
  • try-with-resource문 사용 시 자동으로 자원 해제가 되므로 불필요
  • try-catch-finally문 사용 시 사용해줘야 메모리 누수를 방지하고 다른 곳에서 리소스 사용이 가능함
  • finally문 내에서도 역시 예외처리를 해줘야 함

 


 

[ void flush() ]

  • 버퍼에 남은 내용이 있다면, 모두 파일에 출력해줌

 

출처 : codevang.tistory.com/151

728x90
반응형

댓글