일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 도커
- Eclipse
- eclipse 설정
- java 오류
- 이클립스 설정
- elasticsearch
- HTML
- 인텔리제이
- jQuery
- JSP
- 형변환
- docker
- Excel
- Java
- 엑셀
- spring form
- db
- tomcat
- CSS
- 쿼리
- 엘라스틱서치
- 에러
- JavaScript
- 한글 깨짐
- spring 오류
- 자바스크립트
- 이클립스
- 데이터베이스
- 자바 리스트
- 자바
- Today
- Total
개발노트
InputStream, OutputStream, FileInputStream, FileOutputStream 본문
InputStream, OutputStream, FileInputStream, FileOutputStream
dev? 2022. 5. 15. 15:04InputStream
- byte 단위의 입력 스트림의 최상위 클래스(추상 클래스)이다.
(추상 클래스 - 스스로 객체 생성 불가)
- buffer, file, network 단에서 입력되는 데이터를 읽어오는 기능을 한다.
메서드 | 설명 |
void close() throws IOException | 입력 스트림을 닫는다. |
int read() throws IOException | 1바이트를 읽어들인 후, int 형으로 변환하여 리턴한다. 만약 EOF(End Of File)을 만날 경우, -1을 출력한다. ( EOF는 파일의 끝을 의미, 윈도우에서 "<Crtl> +<Z>" 명령 과 동일한 기능을 수행 ) |
int read(byte buffer[]) throws IOException | 입력 스트림으로부터 buffer[]의 크기만큼 데이터를 읽어들여 buffer[]에 저장한다. 리턴 값은 읽어들인 데이터의 길이이다. ( inputStream.available(); => 파일의 크기 읽어오기 ) |
FileInputStream
- InputStream을 상속하여 구현한 자식 클래스이다. (보조 스트림)
- 하드 디스크 상에 존재하는 파일로부터 byte 단위의 입력을 처리하는 클래스
(즉, 출발 지점과 도착 지점을 연결해주는 스트림을 생성하는 클래스)
- 파일이 존재하지 않을 경우 FileNotFoundException 예외를 처리해야 한다.
- 파라미터로 File 객체나 String 객체를 받는다.
public class Test1 {
public static void main(String[] args) {
String path = "test.txt"; // 상대경로
//읽은 내용이 저장될 byte 배열
byte[] data = null;
// byte 배열을 반환해 저장될 문자열 변수
String result = null;
// 파일 읽기
InputStream inputStream = null;
try {
inputStream = new FileInputStream(path); // 파일 열기
// 데이터를 저장할 byte 배열 만들기
data = new byte[inputStream.available()]; // inputStream.available(); : 파일의 크기 읽어오기
inputStream.read(data);
System.out.println("파일 읽기 성공");
} catch (FileNotFoundException e) {
System.out.println("저장 경로를 찾을 수 없음 >> " + path);
} catch (IOException e) {
System.out.println("알 수 없는 에러");
}finally {
try {
if (inputStream != null)
inputStream.close(); // 파일 닫기
}catch (IOException e){
e.printStackTrace();
}
}
//byte 배열에 저장된 데이터를 문자열로 변환
if (data != null){
try {
result = new String(data, "utf-8");
System.out.println(result);
} catch (UnsupportedEncodingException e) {
System.out.println("지원하지 않는 인코딩입니다.");
}
}
}
}
OutputStream
- byte 단위의 출력 스트림의 최상위 클래스(추상 클래스)이다.
(추상 클래스 - 스스로 객체 생성 불가)
- buffer, file, network 단으로 데이터를 내보내는 기능을 한다.
메서드 | 설명 |
void close() throws IOException | 출력 스트림을 닫는다. |
void write(int num) throws IOException | int num의 하위 8비트(1Byte)를 출력스트림으로 내보낸다. |
void write(byte buffer[]) throws IOException | buffer[]에 저장된 데이터를 출력스트림을 통해 내보낸다. |
void flush() throws IOException | 버퍼에 있는 내용을 출력스트림으로 내보낸다. |
※ 버퍼 (buffer)
- 데이터가 목적지로 보내지기 전에 머무는 곳이다.
- 입력 버퍼와 출력 버퍼가 있으며, 출력 스트림은 기본적으로 flush() 명령이 떨어지기 전까지는 출력 버퍼에서 목적지로 데이터가 전달되지 않는다.
(일반적으로는 자동으로 flush 메서드를 호출하도록 구현되어있다.)
- 장점 : 데이터를 모아서 전송하기 때문에 속도 측면에서 뛰어나다.
FileOutputStream
- OutputStream을 상속한 자식 클래스이다. (보조 스트림)
- 파일로 데이터를 출력하는 기능을 수행한다.
- 출발 지점과 도착 지점을 연결해주는 스트림을 생성한다.
- 기존에 파일을 덮어쓰는 방식과 이어 쓰는 방식을 구분하기 위해, 생성자의 두 번째 인자 append를
true / false로 지정할 수 있다.
public class Test {
public static void main(String[] args) {
String str = "가나다라마바사abcdefg12345";
String path = "test.txt"; // 상대 경로
byte[] buffer = null;
try {
// 문자열을 byte 배열로 변경
buffer = str.getBytes("utf-8"); // utf-8 인코딩 적용
} catch (UnsupportedEncodingException e) {
System.out.println("지원하지않는 인코딩입니다.");
e.printStackTrace();
}
// 파일 저장
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(path); // 파일열기
outputStream.write(buffer);
System.out.println("파일 저장됨");
} catch (FileNotFoundException e) {
System.out.println("저장 경로를 찾을 수 없습니다.");
e.printStackTrace();
} catch (IOException e) {
System.out.println("저장에 실패");
e.printStackTrace();
} finally {
try {
if (outputStream != null)
outputStream.close();
} catch (IOException e) {
System.out.println("파일을 닫는데 실패");
e.printStackTrace();
}
}
}
}
https://blog.naver.com/PostView.nhn?blogId=pjok1122&logNo=221505642784
'Programming > JAVA' 카테고리의 다른 글
Thread (쓰레드) (0) | 2022.05.17 |
---|---|
직렬화(Serialization) (0) | 2022.05.16 |
Collections.sort() (0) | 2022.05.14 |
List / ArrayList 클래스 (0) | 2022.05.13 |
맵 클래스 (Map Class) (0) | 2022.05.12 |