Java 관련/Java

[Java] FileInputStream

씨네 2022. 8. 1. 10:49
728x90

자바에서 입력과 출력을 위해 주로 FileInputStream과 FileOutputStream을 사용합니다.

 

FileInputstream은 read()메소드가 있는데 이것은 크게 두가지 형태로 사용됩니다.

 

read();

read(byte[]);

 

이런 두가지 형태인데요.

read()는 1바이트씩 읽고 read(byte[])는 배열의 크기만큼 읽습니다.

 

 

import java.io.FileInputStream;

public class MainClass {
	
    public static void main(String[] args) {
    	
        // read()
        InputStream inputStream = null;
        try {
        	inputStream = new FileInputStream("C:\\java\\hello.txt");
            int data = 0;
            
            while(true) {
            
            	try {
                	data = inputStream.read();
                } catch (IOException e) {
                	e.printStackTrace();
                }
                if(data == -1) break;
                System.out.println("data : " + data);
            }
        } catch (FileNotFoundException e) {
        	e.printStackTrace();
        } finally {
        	try {
            	if(inputStream != null) inputStream.close();
            } catch (IOException e) {
            	e.printStackTrace();
            }
        }
    }

}

 

ㅈInputStream의 경우를 보면 inputStream = new FileInputStream("C:\\java\\hello.txt"); 부분에서

C아래 java 폴더 아래 hello.txt파일에서 읽어오겠다는 의미입니다.

 

해당 파일에는 제가 Hello Java라는 글자를 작성해서 저장해두었습니다.

 

우선 실행을 한번 해볼까요?

 

data와 이상한 숫자들이 출력이 됐는데 이 숫자는 문자가 ASCII코드로 변환되어 출력이 된 것입니다.

 

코드를 해석해보면 무한으로 도는 while문이 있습니다.

data라는 변수에 읽어온 것을 data에 저장하게 됩니다.

그런데 data가 -1이면 빠져나오게 되는 부분이 있기 때문에 더이상 읽을 부분이 없으면 무한으로 도는 반복문이지만 빠져나오게 됩니다.

 

 

import java.io.FileInputStream;

public class MainClass {
	
    public static void main(String[] args) {
    	
        // read()
        InputStream inputStream = null;
        try {
        	inputStream = new FileInputStream("C:\\java\\hello.txt");
            int data = 0;
            byte[] bs = new byte[3];
            
            while(true) {
            
            	try {
                	data = inputStream.read(bs);
                } catch (IOException e) {
                	e.printStackTrace();
                }
                if(data == -1) break;
                System.out.println("data : " + data);
                for(int i = 0; i < bs.length; i++){
                	System.out.println("bs[" + i + "] : " + bs[i]);
                }
            }
        } catch (FileNotFoundException e) {
        	e.printStackTrace();
        } finally {
        	try {
            	if(inputStream != null) inputStream.close();
            } catch (IOException e) {
            	e.printStackTrace();
            }
        }
    }

}

위의 코드의 출력 결과입니다.

총 10간으로 구분을 했는데요 Hello Java는 9글자인데 왜 10칸으로 구분할까요??

띄어쓰기도 문자로 구분을 하기 때문입니다.

마지막에 a만 읽어온 data : 1의 부분에는 bs[0]은 97인데 bs[1]과 bs[2]는 왜 97, 119로 출력이 될까요??

이전에 읽었던 부분이 삭제되지 않고 그래로 저장되어 남아 있기 때문입니다.

 

728x90