팀프로젝트의 주제에 다운로드기능을 구현해야해서 미리 공부하고 있다
package testPack;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutStreamIO {
public static void main(String[] args) {
File file = new File("TestFile");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file, true);
//출력할때 어떤 형식/목적지로 출력을 할것인가 -> (file)
fos.write(69);//1byte만 들어가야한다 그이상이면 해당숫자의 의미를 잃는다
//FileOutputStream fos를 이용해서 해당데이터를 write한다
}catch(IOException e) {
e.printStackTrace();
}finally {
if(fos != null) {
//해당객체가 null이 아니면 -> 해당 객체가 참조되고 있다면
try {
fos.close();
//Stream을 닫아준다 안닫으면 이동 삭제등 할때
//내가 맨날보는 그거 해당 파일이 어디서 계속 사용중이라고 안된다고뜬다
}catch(IOException e) {}
}
}
}
}
- FileOutputStream -> 메모리를 기준으로 화면상으로 데이터가 이동하면 output
- FileInputStream -> 키보드,마우스로 부터 데이터가 들어오면 input
- 데이터가 흘러들어오거나 나가는 '흐름'을 Stream이라고한다
- File(파일을)output(출력하는)Stream(흐름)
- Stream형식은 1byte, byte타입이 디폴트
- Reader, writer형식은 2byte, char타입이 디폴트
- FileOutputStream(file, true); true를 주면 실행할때마다 해당글자 (fos.write(66))를 추가해줌
- true -> append, false -> 새롭게쓴다
TestFile
package testPack;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class InStreamIO {
public static void main(String[] args) {
File file = new File("TestFile");
System.out.println(file.length()); //-> 파일의 크기를 불러옴
System.out.println(file.canExecute()); //-> 파일이 실행 가능한지
System.out.println(file.canRead()); //-> 파일이 실행 가능한지
System.out.println(file.getAbsolutePath()); //-> 파일의 절대경로
//등등 File클래스의 역할
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
int data = 0;
//read 1byte를 읽어들여서 data에 담아서 출력
while((data = fis.read()) != -1) {
//read를 반복하면서 -1이 아니면 계속 실행 (-1은 read할 데이터가 더 없다는 것)
//-1 -> End Of File (EOF) -> 파일의 끝을 나타내는 용어
System.out.print((char)data);
}
}catch(IOException e) {
e.printStackTrace();
}finally {
if(fis != null) {
try {
fis.close();
}catch(IOException e) {}
}
}
}
}
- file에 B가 저장되어 있었으므로 실행하면 66이 찍힌다 첫글자만 읽는듯 1byte라서?
- file의 내용이 바뀌면 따라서 바꿔 찍는다
- 한글(2byte)을 file에 입력하면 (가) -> 1byte에 해당하는 176이 나옴 원래값(44032)
- 어떤 문자인지 표시를 못할뿐 데이터 자체에는 문제가 없다
- read로 System.out.print를 해주면 file에 적혀있는것 순서대로 찍힌다
- buffer를 사용해서 한덩어리 두덩어리씩 옮겨야 파일이동이 빠르다
실행 콘솔창