일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- start.spring.io
- bootstrap
- 자동형변환
- Java
- 제너릭
- 클래스
- 콜렉션
- 싱글턴
- 루프
- unboxing
- 박싱
- 빌드
- 인텔리제이
- 싱글톤
- Scanner
- 메소드
- dependency
- 제네릭
- 내장객체
- wrapper
- boxing
- suvlet
- maven
- Short
- 언박싱
- 컬렉션
- 스프링
- https://start.spring.io
- 무한
- Jenkins
Archives
- Today
- Total
Developer Gonie
[5주차] 81. 바이트스트림, 특정 파일을 읽기위한 , 특정파일에 쓰기위한 연결다리(FileInputStream / FileOutputStream) - 한 글자 씩(byte단위) 혹은 여러 글자씩(byte 배열) 처리 본문
K-DigitalTraining 강의/1. Java
[5주차] 81. 바이트스트림, 특정 파일을 읽기위한 , 특정파일에 쓰기위한 연결다리(FileInputStream / FileOutputStream) - 한 글자 씩(byte단위) 혹은 여러 글자씩(byte 배열) 처리
이대곤 2022. 6. 7. 10:48* 스트림이란?
특정 파일과 자바파일 사이의 연결다리 역할을 하며, 단방향으로만 작동함(읽기, 쓰기가 동시에 되지 않는다.)
특정 파일로부터 데이터를 읽기 위한 클래스와 특정 파일에 데이터를 쓰기 위한 클래스가 각각 존재한다.
ex) FileInputStream, FileOutputStream 등
* 바이트 스트림(Byte Stream)이란?
1byte(8bit)를 input/output 할 수 있는 스트림이다. FileInputStream / FileOutputStream이 이에 속함.
1byte는 숫자, 영어를 처리하기에 충분하나 한글을 처리하기엔 충분하지 않다.(2byte 필요)
이 때문에 바이트 스트림을 이용해 한글을 처리하면 깨지는 현상이 발생한다.
한글을 다루고 싶다면 문자 스트림의 FileReader/FileWriter를 사용해야 한다.
* FileInputStream에서 FileNotFoundException 예외가 언제 발생되는가?
접근하려는 파일이 존재하지 않는 경우
* FileOutputStream에서 FileNotFoundException 예외가 언제 발생되는가?
경로에 해당하는 폴더가 없는 경우
예시코드
- 실행전 from.txt 파일이 src 바로 위의 폴더에 존재해야 오류가 없음. 파일 내용은 "Nice day~" 를 입력해두자.
- 아래의 코드는 from.txt 안에있는 텍스트를 한 글자씩 to.txt로 옮겨 놓는 동작을 함
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Ex11_04_File {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
// 읽어들이기 위한 용도, 지정한 파일이 존재하지 않으면 에러남
fis = new FileInputStream("from.txt"); // from.txt과 이 자바파일 사이에 데이터를 '읽어오기 위한' 연결다리(스트림)가 형성됨
// write을 위한 용도, 지정한 파일이 존재하지 않아도 자동으로 생성됨
fos = new FileOutputStream("to.txt"); // to.txt와 이 자바파일 사이에 데이터를 '보내기(쓰기) 위한' 연결다리(스트림)이 형성됨
//FileOutputStream fos = new FileOutputStream("to.txt", true); // 이미 존재하는 파일이 없다면 파일을 새로 만들고(여기까진 공통), 이미 존재하는 파일이 있다면 그 뒤에 입력
//FileOutputStream fos = new FileOutputStream("to.txt", false); // 이미 존재하는 파일이 없다면 파일을 새로 만들고(여기까진 공통), 이미 존재하는 파일이 있다면 데이터를 다 지우고 다시 입력 // defualt라서 true/false 안쓴거는 이거랑 같다.
int i;
while (true) {
i = fis.read(); // FileInputStream 객체는 읽기위한 메소드만 존재, from.txt로부터 한 글자씩 아스키 코드값으로 읽어옴
System.out.print((char)i + " ");
if (i == -1) // 파일의 끝에는 EOF 가 들어가있는데 상수라서 -1임
break;
else
fos.write(i); // FileOutputStream 객체는 쓰기위한 메소드만 존재, to.txt에 한 글자씩 문자로 변환하여 입력함
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 사용 후 연결다리를 끊어줘야 함
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
'K-DigitalTraining 강의 > 1. Java' 카테고리의 다른 글
Comments