본문 바로가기
수업(국비지원)/Java

[Java] chap14 : IO기반 입출력 - FileInputStream 클래스

by byeolsub 2023. 4. 17.
  • FileInputStream
FileInputStream 예제 : 파일에서 데이터를 읽기 위한 클래스
  
  주요 메서드
    int read()
          : 1 byte씩 내용을 읽어 리턴
    int read(byte[] buf)
          : buf의 크기만큼 읽어서 buf 변수에 저장. 실제로 읽은 바이트수를 리턴
            가장 많이 쓰이는 방식
    int read(byte[] buf, int start, int len)
          : buf의 len만큼 읽어서 buf 변수에 start 인덱스부터 저장.
            실제 읽은 바이트 수 리턴
    long available()
          : 읽기 가능한 바이트 수를 리턴. 

 

📌

package chap14;

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamEx1 {
	public static void main(String[] args) throws IOException {
		String src = "src/chap14/InputStreamEx1.java";		
		FileInputStream fis = new FileInputStream(src);
		int data = 0;
		System.out.print("1. read() 메서드로 읽기=============");
		while((data=fis.read()) != -1) { //EOF(End Of File)
			System.out.print((char)data);
		}
		fis.close();
		System.out.print("2. read(byte[] buf) 메서드로 읽기=============");
		fis = new FileInputStream(src);
		//fis.available() : 읽기 가능한 바이트 수. 
    //                  현재 하나도 읽지 않았기 때문에 파일의 바이트 크기와 같다.
    byte[] buf = new byte[fis.available()]; //buf의 크기가 파일의 바이트 크기이다.
		//data=fis.read(buf) : buf의 크기만큼 읽어서 buf에 읽은 데이터 저장.
    //                     data변수에는 실제로 읽은 바이트 수를 저장.
    while((data=fis.read(buf)) != -1) { 
			//String <= byte[] , buf에서 0번 인덱스부터 data크기까지를 문자열로 변환.
			System.out.print(new String(buf,0,data));
		}
		System.out.println();
		fis.close();
		System.out.print("3. int read(byte[] buf, int start, int len) 메서드로 읽기=============");
		fis = new FileInputStream(src);
		/*
		 * data=fis.read(buf,0,fis.available()
		 *   buf : 0번 인덱스 부터fis.available()의 갯수만큼 데이터 저장.
		 *   data : 실제 읽은 바이트 수를 전달.
		 */
		while((data=fis.read(buf,0,fis.available())) != -1) { 
			System.out.print(new String(buf,0,data));
	     }
		System.out.println();
	}
}