파일 입출력 StreamIO 찍먹하기

HOHO·2023년 4월 18일
0

팀프로젝트

목록 보기
1/4

팀프로젝트의 주제에 다운로드기능을 구현해야해서 미리 공부하고 있다

OutStreamIO

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


InStreamIO

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를 사용해서 한덩어리 두덩어리씩 옮겨야 파일이동이 빠르다

실행 콘솔창

profile
기계 그잡채가 되고싶다

0개의 댓글