Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- for문
- 집합관계
- function
- OPP개념
- 상수
- 메서드 오버로딩
- 반복문
- java변수
- 인텔리제이 기초 설정
- 메서드
- While
- Java
- 연관관계
- 인텔리제이 한글 깨짐 해결법
- break문
- 형 변환
- 접근제어지시자
- 시스템 환경 변수 편집
- IntelliJ IDEA
- 자바 멀티스레딩
- Thread
- 포함관계
- this예약어
- Java데이터 타입
- 컴파일
- multi-threading
- JAVA객체지향
- 생성자
- continue문
- JAVA기초
Archives
- Today
- Total
최원종의 개발 블로그
FileOutputStream 본문
FileOutputStream은 FileInputStream의 반대 방향으로 파일에 데이터를 쓰는 방법.
FileOutputStream 은 프로그램에서 파일로 데이터를 1바이트씩 내보내는 스트림
| 항목 | 내용 |
| 패키지 | java.io |
| 상위 클래스 | OutputStream |
| 쓰기 단위 | 1바이트 |
| 파일 없을 때 | 자동 생성 |
-코드
package io.ch15;
import java.io.FileOutputStream;
import java.io.IOException;
public class MyFileOutputSystem {
public static void main(String[] args) {
String data = "Hello Java, FileOutputSystem abc abc 안녕 반가워";
//파일이 없으면 새로 생성, 있으면 덮어쓰기
//FileInputStream fos = new FileOutputStream("output.txt");
//FileInputStream fos = new FileOutputStream("output.txt",true); -->Append 모드
//기존 파일에 내용이 있다면 true 뒤에 이어쓰기, false -> 덮어쓰기
try (FileOutputStream fos = new FileOutputStream("output.txt",false)){
//문자열은 FileOutputStream 으로 직접 쓸 수 없습니다
//문자열을 -> byte 배열로 변환해서 넣어주어야 합니다
byte[] dataBytes = data.getBytes();
fos.write(dataBytes);
//
System.out.println("파일 출력 완료 : output.txt" );
} catch (IOException e) {
throw new RuntimeException(e);
}catch (Exception e){
throw new RuntimeException(e);
}
//참고: output.txt를 에디터로 열면 텍스트가 보입니다.
//에디터가 바이트 데이터를 문자로 해석해서 보여주기 때문에
//FileOutputSystem 으로 바이트를 썻지만, 보여주는 방식은 에티터가 결정 합니다.
}
}
-getBytes()로 변환하는 이유
FileOutputStream 은 바이트 기반 스트림입니다.
write() 메서드는 byte 또는 byte[] 만 받습니다.
String 을 직접 넣으면 컴파일 오류가 납니다.
String data = "Hello";
fos.write(data); // 컴파일 오류!
fos.write(data.getBytes()); // 정상 동작
getBytes() 는 문자열을 바이트 배열로 변환해주는 메서드입니다.
"Hello" → [72, 101, 108, 108, 111]
-flush()가 필요한 이유
write()를 호출한다고 해서 데이터가 바로 파일에 저장되는 게 아님
write() 호출
|
내부 버퍼에 데이터 쌓임 ← 아직 파일에 안 씌어짐!
|
버퍼가 가득 차거나 flush() 가 호출될 때
|
파일에 한 번에 저장됨
매 번 디스크에 접근 하는 것보다 모아서 한 번에 쓰는 게 훨씬 빠름
close() 호출 → 내부적으로 flush() 먼저 실행 → 버퍼 남은 데이터 모두 파일에 저장 → 스트림 닫힘
try-with-resources 사용 시 블록 종료 → 자동 close() → 자동 flush()
→ 별도로 flush() 를 호출하지 않아도 됩니다.
-핵심 요약
FileOutputStream
- 프로그램에서 파일로 바이트 단위로 씀
- 기본: 덮어쓰기 / true: 이어쓰기(append)
- 파일이 없으면 자동 생성
- 문자열은 getBytes() 로 변환 후 write()
- try-with-resources 사용 시 자동 flush() → 자동 close()
- 한글 포함 시 getBytes("UTF-8") 명시 또는 FileWriter 권장 (16단원)
'Java > JAVA 유용한 클래스' 카테고리의 다른 글
| FileInputStream / FileOutputStream 실습코드_2 (0) | 2026.03.24 |
|---|---|
| FileInputStream / FileOutputStream 실습 코드_1 (0) | 2026.03.23 |
| FileInputStream (0) | 2026.03.20 |
| 자바 표준 입출력( 키보드, 콘솔) (0) | 2026.03.20 |
| 자바 I/O 개론 (0) | 2026.03.20 |
