어제 오늘 내일

[Java] Text 파일 라인수 세기 본문

IT/Java

[Java] Text 파일 라인수 세기

hi.anna 2021. 6. 6. 04:59

 

Java API를 이용하여 파일을 다루는 방법을 알아보고 있습니다.

[Java] 파일 생성하는 3가지 방법 (File, FileOutputStream, Files)

[Java] 파일, 디렉토리 존재 여부 확인하기

[Java] 파일에 텍스트 쓰기

[Java] 파일, 디렉토리 삭제하기

[Java] 현재 디렉토리 가져오기

[Java] 파일 사이즈 구하는 3가지 방법

[Java] 디렉토리 생성하기

[Java] 파일 또는 디렉토리 생성일자 구하기

[Java] 파일의 최종 수정일자 조회

[Java] 파일 최종수정일자 변경하기

 

이번에는 text 파일의 라인수를 세는 방법을 소개합니다.

Java의 다양한 API를 활용할 수 있는데,

대부분 텍스트 파일을 한 줄씩 끝까지 읽으면서

라인수를 카운트합니다.

  1. Files
  2. BufferedReader
  3. LineNumberReader
  4. Scanner

 

 

1. Files

Files의 lines()와 Stream의 count() 메소드를 사용하여, 파일의 라인수를 구할 수 있습니다.

java.nio.file.Files
public static Stream<String> lines(Path path)

파일에서 line을 읽어서 Stream으로 리턴합니다.

 

java.util.stream.Stream<T>
long count()

Stream으로 들어온 element의 갯수를 세서 리턴 합니다.

 

  예제  

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileLineCount {
    public static void main(String[] args) {

        Path path = Paths.get("d:\\example\\text_file.txt");

        try {

            // 파일 라인수 세기
            long lineCount = Files.lines(path).count();

            // 결과 출력
            System.out.println(lineCount);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Files.lines(path).count();

lines() 메소드는 파일에서 모든 line을 읽어서 Stream으로 리턴하고,

count() 메소드는 Stream의 element 갯수를 리턴합니다.

 

 

 

2. BufferedReader

  예제  

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileLineCount {
    public static void main(String[] args) {

        try {

            // BufferedReader 생성
            BufferedReader reader = new BufferedReader(new FileReader("d:\\example\\text_file.txt"));

            // 라인수 세기
            int lineCount = 0;
            while (reader.readLine() != null) {
                lineCount++;
            }

            // 결과 출력
            System.out.println(lineCount);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

while (reader.readLine() != null) {

   lineCount++;

}

BufferedReader의 readLine() 메소드는 

파일의 한 라인을 읽어서 그 내용을 String으로 리턴하고,

파일의 끝을 만나면 null을 리턴합니다.

이 점을 이용해서, 파일이 끝날 때까지 읽으면서 라인수를 증가시켜서

파일의 전체 라인 수를 구합니다.

 

 

 

3. LineNumberReader

java.io.LineNumberReader 클래스는 줄번호를 추적하는 buffered character-input stream입니다.

 

java.io.LineNumberReader
public int getLineNumber()

getLineNumber() 메소드를 이용하면, 현재 줄번호를 가져올 수 있습니다.

 

  예제  

import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

public class FileLineCount {
    public static void main(String[] args) {
        try {

            // LineNumberReader 생성
            LineNumberReader reader = new LineNumberReader(new FileReader("d:\\example\\text_file.txt"));

            // 라인수 세기

            while (reader.readLine() != null) ;

            int lineCount = reader.getLineNumber();

            // 결과 출력
            System.out.println(lineCount);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

while (reader.readLine() != null) ;

while 문의 body부분에서는 아무것도 하지 않고,

reader.readLine()의 결과가 null일때까지 계속해서 readLine() 메소드를 호출합니다.

(reader.readLine()의 결과가 null인 경우는, 파일의 끝을 만났을 때 입니다.)

 

int lineCount = reader.getLineNumber();

파일의 끝에서, getLineNumber() 메소드를 호출하여, 줄번호를 체크합니다.

 

 

 

4. Scanner

  예제  

import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class FileLineCount {
    public static void main(String[] args) {
        try {

            // Scanner 생성
            Scanner scanner = new Scanner(new FileReader("d:\\example\\text_file.txt"));

            // 라인수 세기
            int lineCount = 0;
            while (scanner.hasNextLine()) {
                scanner.nextLine();
                lineCount++;
            }

            // 결과 출력
            System.out.println(lineCount);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Scanner를 사용하여, 파일을 한줄씩 읽으면서

lineCount를 증가시키고 있습니다.

 

 


 

Java API를 이용하여, 텍스트 파일의 라인수를 세는 방법을 알아보았습니다.

 

 

반응형
Comments