반응형
안녕하세요! 오늘은 Java에서 파일을 읽고 텍스트를 처리하는 두 가지 방법인 Scanner와 StringTokenizer를 알아보겠습니다.
파일에서 데이터를 읽고 각각의 값을 다루는 작업은 실무에서도 정말 자주 사용되니, 천천히 함께 배워봅시다.
1. Scanner를 활용한 파일 읽기
Scanner란?
Scanner는 Java에서 텍스트 데이터를 읽고, 이를 문자열(String), 숫자(int, float) 등으로 변환하는 데 자주 사용되는 클래스입니다.
파일, 키보드 입력, 문자열 등 다양한 입력 소스를 처리할 수 있습니다.
코드 설명
package com.javaex.io.charstream;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerEx {
private static String rootPath = System.getProperty("user.dir") + "\\files\\";
private static String filename = rootPath + "thieves.txt";
public static void main(String[] args) {
File file = new File(filename);
try {
Scanner scanner = new Scanner(file);
// 데이터를 저장할 변수 선언
String name;
float height;
float weight;
while (scanner.hasNextLine()) { // 읽을 줄이 남아 있는지 확인
name = scanner.next(); // 이름 읽기 (문자열)
height = scanner.nextFloat(); // 키 읽기 (실수)
weight = scanner.nextFloat(); // 몸무게 읽기 (실수)
System.out.printf("%s, 키: %.2f, 체중: %.2f%n", name, height, weight);
scanner.nextLine(); // 다음 줄로 이동
}
scanner.close();
} catch (FileNotFoundException e) {
System.err.println("파일을 찾을 수 없습니다.");
}
}
}
코드 분석
- 파일 경로 설정:
- System.getProperty("user.dir"): 현재 작업 디렉터리의 경로를 가져옵니다.
- 파일 경로는 "\\files\\thieves.txt"로 지정합니다.
- Scanner 사용:
- scanner.next(): 문자열 데이터를 읽습니다.
- scanner.nextFloat(): 실수 데이터를 읽습니다.
- scanner.hasNextLine(): 더 읽을 줄이 있는지 확인합니다.
- 결과 출력:
- System.out.printf(): 문자열 포맷을 지정해 데이터를 출력합니다.
- 예외 처리:
- 파일이 없는 경우: FileNotFoundException을 처리합니다.
출력 결과 예시
만약 thieves.txt 파일에 아래와 같은 내용이 있다면:
Alice 160.5 50.3
Bob 172.2 65.8
Charlie 180.0 70.0
프로그램 실행 결과는 다음과 같습니다:
Alice, 키: 160.50, 체중: 50.30
Bob, 키: 172.20, 체중: 65.80
Charlie, 키: 180.00, 체중: 70.00
2. StringTokenizer를 활용한 텍스트 처리
StringTokenizer란?
StringTokenizer는 문자열을 특정 기준(구분자)으로 나누는 데 사용됩니다.
스페이스, 콤마, 탭 등 원하는 구분자로 문자열을 쪼개고, 각각의 값을 다룰 수 있습니다.
코드 설명
package com.javaex.io.charstream;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.StringTokenizer;
public class StringTokenizerEx {
private static String rootPath = System.getProperty("user.dir") + "\\files\\";
private static String filename = rootPath + "thieves.txt";
public static void main(String[] args) {
System.out.println("원본 파일: " + filename);
try (
Reader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
) {
String line; // 한 줄씩 읽기 위한 변수
while ((line = br.readLine()) != null) { // 줄 단위로 읽기
// StringTokenizer로 구분
StringTokenizer st = new StringTokenizer(line, " "); // 공백 기준으로 분리
while (st.hasMoreTokens()) { // 다음 토큰이 있는 동안 반복
String token = st.nextToken(); // 토큰 가져오기
System.out.println("Token: " + token);
}
}
} catch (FileNotFoundException e) {
System.err.println("파일이 없습니다.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
코드 분석
- BufferedReader 사용:
- 한 번에 한 줄씩 데이터를 읽을 때 사용합니다.
- StringTokenizer 사용:
- new StringTokenizer(line, " "): 공백(" ")을 기준으로 문자열을 나눕니다.
- st.hasMoreTokens(): 더 가져올 토큰이 있는지 확인합니다.
- st.nextToken(): 다음 토큰(문자열)을 가져옵니다.
- 예외 처리:
- 파일이 없거나 읽는 중 오류가 발생한 경우 처리합니다.
출력 결과 예시
thieves.txt 파일 내용:
Alice 160.5 50.3
Bob 172.2 65.8
Charlie 180.0 70.0
프로그램 실행 결과는 다음과 같습니다:
Token: Alice
Token: 160.5
Token: 50.3
Token: Bob
Token: 172.2
Token: 65.8
Token: Charlie
Token: 180.0
Token: 70.0
Scanner vs StringTokenizer
특징 | Scanner | StringTokenizer |
목적 | 파일이나 입력 스트림에서 데이터를 읽음 | 문자열 데이터를 토큰으로 나눔 |
사용 용도 | 파일, 키보드 입력 등 다양한 소스 처리 | 문자열 파싱 및 분리 작업 |
유연성 | 다양한 데이터 타입(String, int, float 등) 지원 | 문자열만 처리 가능 |
성능 | 실시간으로 데이터를 읽고 처리 | 문자열을 한 번에 나눔 |
마무리
이번 글에서는 Scanner와 StringTokenizer를 사용해 파일 데이터를 처리하는 방법을 배웠습니다.
- Scanner는 다양한 입력 소스에서 데이터를 읽어오는 데 유용합니다.
- StringTokenizer는 문자열을 구분자로 나누는 데 간단하고 빠른 방법을 제공합니다.
이 두 가지 방법을 이해하고 활용하면, 파일 입출력 및 데이터 처리 작업에서 큰 도움이 될 것입니다.😊
반응형
'개발 > JAVA' 카테고리의 다른 글
쉽게 배우는 Java 에코 서버와 클라이언트 만들기! (8) | 2025.01.24 |
---|---|
JDBC와 오라클 데이터베이스: 자바로 간단한 작가 관리 애플리케이션 만들기 (4) | 2025.01.23 |
Java 입출력 스트림 이해하기: Buffered 및 CharStream 사용 예제 (11) | 2025.01.21 |
Java 파일 입출력 처리 및 파일 복사 예제 (8) | 2025.01.20 |
자바 I/O 스트림 이해하기: BufferedStream, ByteArrayStream, DataStream 활용하기 ✨ (6) | 2025.01.17 |