InputStream(입력스트림)과 OutputStream(출력스트림)은 기본 스트림으로 byte 단위로 데이터를 다룬다.
FileInputStream / FileOutputStream
파일로부터 데이터를 읽기/쓰기 위한 입력/출력용 기본 스트림
바이트 단위의 입력/출력을 처리하므로 이미지나 오디오 파일과 같은 이진 파일을 다룰 때 유용하다.
InputStream
이 추상 클래스는 바이트(Byte) 입력 스트림을 나타내는 모든 클래스의 슈퍼 클래스다.
하위 클래스에는 FileInputStream, ByteArrayInputStream이 있음(xxxInputStream 식으로 표현됨)
FileInputStream
: 기존 파일과 연결된 입력 스트림 객체를 생성
FileInputStream(File file), FileInputStream(String name)
📝 주요메소드
메소드 | 설명 |
abstract int read() | 입력 스트림으로부터 1 바이트를 읽어 정수로 리턴함 |
int read(byte[] b) | 입력 스트림으로부터 읽어서 byte 배열에 저장하고, 읽어 들인 바이트 개수를 리턴함 |
int read(byte[]b , int off, int len) | len 바이트를 읽어서 바이트 배열의 off 위치부터 저장함 |
int available() | 다음 read()할 때, 블로킹 없이 입력 스트림에서 읽을 수 있는 바이트 단위의 데이터 길이 |
long skip(long n) | 입력 스트림에서 n 바이트를 건너 뜀 |
void mark(int readlimit) | 입력 스트림에서 현재 위치를 표시함 |
void reset() | mark()에서 표시된 위치로 스트림의 현재 위치를 이동 |
✍️ InputStream 예제코드
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamExample {
public static void main(String[] args) {
// 읽을 파일 경로를 지정
String filePath = "example.txt";
// InputStream 객체를 선언
InputStream inputStream = null;
try {
// FileInputStream 객체를 생성하여 파일을 읽기
inputStream = new FileInputStream(filePath);
// 읽은 데이터를 저장할 배열을 선언
byte[] buffer = new byte[1024];
int bytesRead;
// 파일에서 데이터를 읽어오는 동안 반복
while ((bytesRead = inputStream.read(buffer)) != -1) {
// 읽은 데이터를 String으로 변환하여 출력
System.out.print(new String(buffer, 0, bytesRead));
}
} catch (IOException e) {
// 예외가 발생하면 예외 메시지를 출력
e.printStackTrace();
} finally {
// InputStream을 닫는다.
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
OutputStream
이 추상 클래스는 바이트(Byte) 출력 스트림을 나타내는 모든 클래스의 슈퍼 클래스다.
하위 클래스에는 FileOutputStream, ByteArrayOutputStream이 있음(xxxOutputStream 식으로 표현됨)
FileOutputStream
: 기존 파일(없다면 생성)과 연결된 출력 스트림 객체를 생성
FileOutputStream(String name), FileOutputStream(File file, boolean append)
📝 주요메소드
메소드 | 설명 |
abstract void write(int b) | 1바이트 데이터를 출력 스트림에 씀 |
void write(byte[] b) | byte형 배열 b의 모든 바이트를 출력 스트림에 씀 |
void write(byte[] b, int off, int len) | byte형 배열 b의 off 위치부터 len 바이트를 출력 스트림에 씀 |
void close() | 출력 스트림을 닫고 자원을 돌려줌 |
void flush() | 출력 스트림에 남아 있는 모든 데이터를 최종 목적지로 보 |
✍️ FileOutputStream 예제코드
import java.io.*;
public class Main {
public static void main(String[] args) {
File inFile = new File("c:\\Java\\Main.java"); //해당 경로에 있는 파일을 읽음
File outFile = new File("c:\\Java\\FileTemp.java"); //출력할 파일 객체를 생성
try ( InputStream is = new FileInputStream(inFile); //파일 인자를 객체로 전달
OutputStream os = new FileOutputStream(outFile)){
int nData;
nData = is.read();
while (nData != -1) { //-1는 파일의 끝을 의미, 파일이 끝나면 while문 종료
os.write(nData);
nData = is.read();
}
} catch (Exception e) {
System.out.println(e);
}
}
}
반응형
'Programming > JAVA' 카테고리의 다른 글
java.lang 패키지/오토박싱(Autoboxing) (0) | 2024.10.14 |
---|---|
Object와 오버라이딩(Overriding) (0) | 2024.10.10 |
스프링 빈과 의존관계(Dependency Injection) (0) | 2024.01.12 |
테스트 케이스 - assertThrows (0) | 2024.01.09 |
AfterEach 어노테이션 사용법 (2) | 2024.01.04 |