FileOutStream 클래스

- 데이터를 파일 시스템의 파일에 바이트 스트림으로 저장하기 위해 사용된다.

- OutputStream(바이트 스트림) 클래스의 하위 클래스

- 기본적으로 파일이 없으면 생성하고, 이미 존재하면 그 파일에 덮어 씀으로 기존 내용은 사라진다.

 

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

public class Ex11_FileOutputStream {

	public static void main(String[] args) {
		String pathname = "test.txt";
		// 파일에 내용을 저장하는 byte 스트림
		FileOutputStream fos = null; // 메모리할당을 받지 않음.
		// 쓰레기를 가지고 있음.
		// 초기화되어있지 않아서. ex; int a; 
		int data;
		
		try { // 이 블록은 무조건 실행하는 것은 아님
			fos = new FileOutputStream(pathname); // 메모리할당받음
				// 해당 파일이 없으면 생성하고, 존재하면 삭제하고 만듦.
			System.out.println("문자열 입력[Ctrl+Z:종료]");
			while( (data = System.in.read()) != -1) {
				fos.write(data);
			}
			fos.flush();
			System.out.println("파일 저장 완료...");
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fos != null) { // 메모리할당되어있으면 닫아야함.
				try {
					fos.close(); // 리소스를 닫아주어야 에러가 생기지 않음.
				} catch (Exception e2) {
				}
			}
		}
		
	}

}

위와 같은 의미

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

public class Ex12_FileOutputStream {

	public static void main(String[] args) {
		String pathname = "test.txt";
		int data;
		
		// JDK 7.0부터 가능 자동 close
		try (FileOutputStream fos = new FileOutputStream(pathname)) {
			System.out.println("문자열 입력[종료:ctrl+z]");
			
			while( (data = System.in.read()) != -1) {
				fos.write(data);
			}
			fos.flush();
			System.out.println("파일 저장 완료...");
		} catch (IOException e) {
			// ctrl+shift+o : 자동 import
			e.printStackTrace();
		}

	}

}

try( 리소스 객체 생성) 하게 되면 자동으로 close 해주기 때문에 따로 finally 에서 문자열입력을 받았으면 (객체가 생성되었으면) 닫는 부분의 코딩을 안해도된다.

키보드로 입력한 값을 1byte씩 읽고 1byte씩 파일에 넣기 때문에 문자가 잘 들어가진다.

 

FileOutputStream(String name) 주어진 이름의 파일을 바이트 스트림으로 쓰기 위한 FileOutputStream객체를 생성한다. 

 

+ Recent posts