씨네
공부하는 개발자 강씨네
씨네
  • 분류 전체보기 (460)
    • Web (21)
      • HTML (11)
      • CSS (10)
    • JS 관련 (49)
      • JavaScript (27)
      • JQuery (22)
    • TS 관련 (15)
      • TypeScript (15)
    • NodeJS (7)
      • NodeJS (7)
    • 따라하며 배우는 시리즈 (23)
      • NodeJS & ReactJS Basic (23)
      • NodeJS & ReactJS Movie (0)
      • NodeJS & ReactJS Youtube (0)
      • NodeJS & ReactJS ChatBot (0)
    • SPA (14)
      • React (14)
      • Vue (0)
      • Anguler (0)
    • Java 관련 (118)
      • Java (52)
      • JDBC (6)
      • JSP & Servlet (18)
      • Spring Legecy (38)
      • SpringBoot (4)
    • Python (26)
      • Python (20)
      • PyMongo (1)
      • Django (5)
    • Git (24)
      • Github (24)
    • RDB (22)
      • Oracle (21)
      • MySQL (1)
    • NoSQL (5)
      • MongoDB (5)
    • OS (4)
      • Linux (4)
    • 빅데이터 (2)
      • hadoop (2)
    • IDE (20)
      • eclipse (11)
      • VSCODE (4)
      • VisualStudio (1)
      • IntelliJ (1)
      • PyCharm (1)
      • DBeaver (2)
    • Install (3)
      • Tomcat (1)
      • Docker (1)
      • Anaconda (1)
    • 오류&에러 (28)
      • TS (2)
      • NodeJS (7)
      • SQL (8)
      • Java (1)
      • Spring (4)
      • Git (6)
      • 기타 (0)
    • 알고리즘 (67)
      • 수열 (1)
      • 백준(backjoon) (39)
      • Programmers (27)
    • 자격증 (5)
      • SQLD (5)
    • 기타 (2)
    • IT유튜브로 지식쌓기 (2)

공지사항

인기 글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
씨네

공부하는 개발자 강씨네

[Java] FileInputStream
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
저작자표시 (새창열림)

'Java 관련 > Java' 카테고리의 다른 글

[Java] 복사 Copy(FileInputStream / FIleOutputStream)  (0) 2022.08.03
[Java] FileOutputStream  (0) 2022.08.02
[Java] Static(스태틱)  (0) 2022.07.31
[Java] import(임포트)  (2) 2022.07.30
[Java] 패키지(package)  (0) 2022.07.29
    'Java 관련/Java' 카테고리의 다른 글
    • [Java] 복사 Copy(FileInputStream / FIleOutputStream)
    • [Java] FileOutputStream
    • [Java] Static(스태틱)
    • [Java] import(임포트)
    씨네
    씨네
    개발자 씨네가 공부하는 내용을 기록 겸 공유하는 블로그입니다!

    티스토리툴바