Day 50, 51 - IO(InputStream, OutputStream)
java.io.*
데이터의 input,ouput에 대한 기능을 가지고 있는 package
checked Exception이 발생한다.(읽고자하는 파일이 없거나 위치(디렉토리)가 없거나 확인 후 진행해야한다
java stream 객체
InputStream (입력 스트림 객체)
OutputStream(출력 스트림 객체)
기본적으로 데이터 단위는 1byte이다
연속적으로 전송하는 데이터의 크기를 보완해주기 위해서 Buffer와 filter로 감싸서 사용하기도 한다
데이터는 0과1로 이루어진 binary code
1. FileInputStream : 파일을 읽어옴
2. FileOutputStream : 파일을 출력
3. DataInputStream : 타입을 선택해서 읽어옴
4 DataOutputStream : 타입을 선택해서 출력
5. FileReader : 문자만 출력 ( 이미지, 동영상, 음악 안됨)
6. FileWriter : 문자만 입력( 이미지, 동영상, 음악 안됨)
7. InputStreamReader : 파일을 읽어오는데 문자만 읽어옴
8. OutputStreamReader : 파일을 출력하는데 문자만 씀
파일 가져와서 읽을때 물리적인 주소는 \하나만 입력하면 문법오류 발생하기 때문에 \\두개 작성하여 나타내라
절대경로 : 고정값으로 절대적으롭 변하지 않는 주소를 가지고 있는 것 c:\\~~~
상대경로 : 주소가 계속해서 변함 상대경로는 ./~~
FileInputStream
객체생성하고 data를 가져왔으면 read()로 읽으면 된다.반환타입 int(0101이니까) 데이터를 읽다가 더 이상 없으면 -1을 반환한다.
그래서 data를 전부 읽고 싶다면 while문을 통해서 -1이 될때까지 반복해주면 된다. Arguments String의 name
FileoutputStream
객체 생성하고 가져온 data 파일에다가 write()로 쓰면 된다. 출력해주기 때문에 반환타입 없고 가져온 데이터의 길이만큼 반복하면된다. Arguments String의 name
DataInputStream
data의 타입을 정해서 입력해준다. 객체 생성 후 readInt, readBoolean 등 입력 가능 Arguments로 InputStream
DataOutputStream
data의 타입을 맞춰서 출력해준다. 객체 생성 후 .writeInt, .writeBoolean 등 타입을 맞춰서 출력가능 Aruguments로 OutputStream
FileReader
byte로 읽어오는데 문자만 Arguments String filename
FileWriter
byte로 출력하는데 문자만 Arguments String filename
InputStreamReader
byte로 읽어오는데 문자만 Arguments String filename, charset
System.in으로 입력받아서 파일로 저장할 수 있다.
먼저 입력받고 InputStreamReader로 -1일때까지 읽으면서
그걸 fileWriter로 write()하면 직접 입력받은 값을 파일에 쓸 수 있다
OutputStreamReader
byte로 출력하는데 문자만 Arguments String filename, charset
OutputStream 객체는 자동으로 인코딩해주고 플러쉬해주는 객체
BufferedInputStream / BufferedOutputStream
Stream을 도와주는 Buffer 0101010101110101010 이거 하나씩 읽고 출력하는데 오래걸리니까 뭉쳐서 한번에 읽고 한번에 찍어내자 왔다갔다하면 느리고 귀찮으니까
Buffer를 이용한 파일 복사
기존파일 입력받고 그 입력받은 객체 버퍼로 감싸기
복사할 파일 출력하고 출력하는 객체 버퍼로 감싸기
while문으로 입력받은 것 읽으면서 그거 다시 그대로 출력하는 곳에 써줌
복사끝
기존 내용이 있는 파일에 내용을 입력받아서 추가내용 append
FileWriter("파일명",true) 을 Buffered로 감싸고 PrintWriter로 감싸면 PrintWriter가 인코딩 자동으로 해주고 출력됨
true 설정해주면 append
InputStreamReader로 받고 읽으면서 써주면 됨
**중요 IO객체는 사용하면 닫아줘야함(close()) 순서는 역순으로 닫으면 된다.
즉 가장 최근에 만들어진 것 부터 닫으면 된다
isFile() : 파일이니?
.mkdir() : 디렉터리 생성
.renameTo() : 파일의 이름만 작성하는게 아니라 위치를 찾아가서 수정하도록 경로를 작성해줘야함