반응형
05-15 16:06
Today
Total
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
관리 메뉴

개발하는 고라니

[Java] 파일 입력과 EOF 본문

Languages/Java

[Java] 파일 입력과 EOF

조용한고라니 2021. 3. 10. 12:32
반응형

파일에서 문자열 데이터를 읽어 문자열 배열에다 저장하는 프로그램을 생각해보자.

names.txt라는 파일에 다음과 같이 값이 있다.

강호동
유재석
하하
김지호
김현준
김태희
박민정

names.txt에서 데이터를 읽어들이기 위해 FileInputStream을 열어야 하고, 데이터를 받아오기 위해 Scanner를 생성해주자.

		String url = "names.txt";
		String[] names = new String[10];
		
		InputStream fis = new FileInputStream(url);
		Scanner sc = new Scanner(fis);

근데 문제가 있다. 파일의 입력을 계속 받아오긴 할텐데... 파일의 끝을 만나면 그만 읽어야할텐데, 그 끝을 어떻게 표현하지? Scanner를 이용한다면 다음과 같이하면 된다.

		int idx = 0;
		while( sc.hasNextLine() ) 
			names[idx++] = sc.nextLine();

sc.hasNextLine()은 다음에 읽을 줄이 더 있는지에 대해 boolean 값을 반환하는 메서드이다. 만약 다음에 더 읽을 것이 없다면 EOF를 만난 것이므로 false를 반환하여 읽는 것을 중단할 것이다.

 

names 배열에 들어간 이름을 출력해보자.

		for(int i=0; i<10; i++)
			System.out.print(i != 9?names[i] + ",":names[i] + "\n");

굿

# Code </>

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class Program3 {

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

		String url = "names.txt";
		String[] names = new String[10];
		
		InputStream fis = new FileInputStream(url);
		Scanner sc = new Scanner(fis);
		
		
//		for(int i=0; i<7; i++)
//			names[i] = sc.nextLine();
		
		int idx = 0;
		while( sc.hasNextLine() ) 
			names[idx++] = sc.nextLine();
		
		for(int i=0; i<10; i++)
			System.out.print(i != 9?names[i] + ",":names[i] + "\n");
		
		fis.close();
	}
}
반응형

'Languages > Java' 카테고리의 다른 글

[Java] 하나의 객체로 Singleton 패턴 적용  (0) 2021.08.06
[Java] 추상화  (0) 2021.04.05
[Java] Shuffle 메서드  (0) 2021.03.10
[Java] 상속  (0) 2021.03.08
[Java] 클래스와 객체  (0) 2021.03.01
Comments