JAVA

[JAVA] IO (FileInputStream) (3)

HJLIM 2020. 10. 1. 14:59

FileInputStream은 파일 시스템의 파일에서 입력 바이트를 얻는다. 

FileInputStream은 이미지 데이터와 같은 원시 바이트의 스트림을 읽기 위한 것으로 문자 스트림을 읽으려면

FileReader을 사용하면 된다.

 

다음은 저장한 텍스트 파일을 불러오는 코드이다.

package io;

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

public class IOEx5 {

	//파일에 문자 데이터 저장
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//근원지와 목적지의 개념을 가지고 접근해야 함. 
		File file = new File("C:/IO/IOtest.txt");
		FileInputStream fis; //파일을 읽어들임
		int readByte;
		try {
			fis = new FileInputStream(file); //객체 생성해서 경로 넣어줌(파일의 근원지를 받음 - 목적지는 시스템 화면).
			while(true) { //전부 읽기위해 무한 루프
			//파일을 읽음
			readByte = fis.read(); //정수로 넘어오기 때문에  캐릭터로 변환시킴
			if(readByte == -1) {   //더이상 읽을것이 없으면 -1 반환 
				break;
			}
			System.out.print((char)readByte); //개행 기능이 없음.			
			}
			fis.close(); //파일을 닫음.
		}catch(IOException e) {
			e.printStackTrace();
		}
		
	
	}

}

File file = new File("C:/IO/IOTest.txt");로 텍스트 파일이 저장된 객체를 생성하고 

파일을 읽어들이는 FileInputStream fis 객체를 생성한다.  그 다음 파일 경로를 넣어주기 위한  fis = new FileInputStream(file); 객체를 생성해서 경로를 넣어준다.

 

int readByte로 데이터가 정수로 넘어오기 때문에 readByte = fis.read();로 캐릭터로 변환시키고 더 이상 읽을 것이 없으면 -1을 반환하며 while문을 빠져나온다. 마지막으로 불러온 파일을 꼭 닫아줘야 하기 때문에 close()로 파일을 닫는다. 

 

C:/IO/IOTest.txt 파일을 정상적으로 불러와 출력한 결과이다.

 


다음은 txt파일에 저장된 텍스트를 배열로 저장하여 출력하는 코드이다. 

package io;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

public class IOEx6 {
	public static void main(String[] args) throws IOException {

		File file = new File("C:/IO/IOtest.txt");
		InputStream is = new FileInputStream(file); // 파일 경로 넣어줌.
		int readByteNo;
		byte[] readBytes = new byte[3]; // 파일에서 읽어온 걸 담는 역할
		String data = "";
		readByteNo = is.read(readBytes); // 다 읽어들여라.

		
		data += new String(readBytes, 0, readByteNo); // 배열에 있는 모든 값들을 읽어와서 문자열로 만들어라.
		System.out.print(data);
		is.close();
	}
}

아까와 마찬가지로 파일 경로가 있는 file객체를 생성해주고 FileInputStream is에 파일 경로를 넣어준다.

int readBytesNo;     //read()는 입력 스트림의 1바이트를 읽기 위한 메소드로 반환형이 int형이다.

byte[] readBytes = new bytes[3];  //파일에서 읽어온 걸 3크기를 갖는 readBytes[]에 담는다.

String data = "";     //다시 문자열로 변환하기 위해 String data를 선언하고 

readByteNo = is.read(readBytes);  //다 읽어 들인다.

 

그 다음

data += new String(readBytes, 0 ,readBytesNo); // 배열에 있는 모든 값들을 읽어와서 문자열로 만들고

System.out.print(data); //출력한다.