본문 바로가기
스터디/혼공학습단 10기 - 자바 & 머신러닝

[혼공학습단] 자바로 텍스트파일 읽어보기(+파이썬도)

by 찌노오 2023. 8. 20.

 

선택미션

주차 진도 선택 미션
6주차 chatper14 p. 632 문제 2번 풀고, 풀이과정 설명하기

 

연습문제 풀이

2. FileReader와 BufferReader를 이용해, source.txt 내용을 읽고, 각 라인 번호를 추가해 모니터로 출력하는 프로그램을 작성해보세요.

 

package sec02.verify.exam02;

import java.io.BufferedReader;
import java.io.FileReader;

public class AddLineNumberExample {
    public static void main(String[] args) throws Exception {
        String filePath = "src/sec02/verify/exam02/AddLineNumberExample.java";

        FileReader fr = new FileReader(filePath);
        BufferedReader br = new BufferedReader(fr);

        int rowNumber = 0;
        String rowData;
        while( (rowData=br.readLine())!= null ) {
            System.out.println(++rowNumber + ": " + rowData);
        }

        br.close();
    }
}

 

 

설명

주어진 파일의 내용을 줄 번호와 함께 출력하는 기능을 수행하는 코드다.

 FileReader와 BufferedReader를 이용하여 파일을 읽고, 각 줄의 내용을 저장하며, 줄 번호를 증가시켜 출력한다.

 

코드 동작 및 출력 순서

클래스 선언

  • String filePath = "src/sec02/verify/exam02/AddLineNumberExample.java";: 읽어올 Java 파일의 경로를 지
  • FileReader fr = new FileReader(filePath);: 지정된 경로의 파일을 읽기 위해 FileReader 객체 생성
  • BufferedReader br = new BufferedReader(fr);: BufferedReader를 사용하여 FileReader로부터 데이터를 읽어오는 버퍼를 생성

 

실행 코드

  • int rowNumber = 0;: 줄 번호를 나타내기 위한 변수 rowNumber를 초기화함
  • String rowData;: 각 줄의 내용을 저장할 변수 rowData를 선언함
  • while ((rowData = br.readLine()) != null) {: 파일을 한 줄씩 읽어오면서 파일 끝에 도달할 때까지 반복함
  • br.readLine()은 파일에서 한 줄을 읽어오는 메서드. 만약 파일의 끝에 도달하면 null을 반환함
  • System.out.println(++rowNumber + ": " + rowData);: 줄 번호를 1 증가시키고, 줄 번호와 읽어온 데이터를 함께 출력, 각 줄의 시작에 줄 번호가 추가되어 출력됨
  • br.close();: 사용이 끝난 BufferedReader를 닫아 리소스를 해제

 

 

출력결과

 

 

잊을만 하면 하는 python로 구현해보기

여담인데, 파이썬로도 이런 파일 스트림 많이 하는데, 실제로 코드가 매우 간단하다.

여기서는 colab으로 구현해보기로 했다.

 

작성한 java코드를 verify.txt라는 이름으로 colab에 일단 업로드시키고 다음과 같이 코드를 작성했다.

 

file_path = "/content/verify.txt"

with open(file_path, 'r') as file:
    row_number = 0
    for line in file:
        row_number += 1
        print(f"{row_number}: {line.strip()}")

출력결과

들여쓰기가 제대로 안되어 있는 것 같지만, 매우 간단하고 직관적인 코드로 똑같이 구현이 가능하다.

아무튼 java에서 복잡한 스트림 처리는 open() 함수로 퉁쳐서 처리하는 모습을 볼 수 있다.

 

 

 

 

** 사실과 다른 내용이 있을 수 있습니다. 언제든지 피드백 부탁드립니다!

반응형

댓글