자바에서 파일의 라인 수 세는 법


엄청 큰 데이터 파일이 있는데요. 가끔 이 데이터 파일들이 몇줄짜리인지 알아야 할 필요가 있는데, 지금까지는 이걸 한줄 한줄 마지막줄까지 읽는 방식으로 했는데 좀더 효율적으로 읽는 방법이 없을까 궁금해요.

  • 2016년 02월 07일에 작성됨

조회수 547


1 답변


좋아요
0
싫어요
채택취소하기

테스트 했을때 readLine보다 6배나 빠른 방법인데요. 150메가짜리 로그 파일이면 0.35초면 읽습니다. readLines()로 하면 2.40초가 걸리구요.

public static int countLines(String filename) throws IOException {
    InputStream is = new BufferedInputStream(new FileInputStream(filename));
    try {
        byte[] c = new byte[1024];
        int count = 0;
        int readChars = 0;
        boolean empty = true;
        while ((readChars = is.read(c)) != -1) {
            empty = false;
            for (int i = 0; i < readChars; ++i) {
                if (c[i] == '\n') {
                    ++count;
                }
            }
        }
        return (count == 0 && !empty) ? 1 : count;
    } finally {
        is.close();
    }
}
  • 2016년 02월 07일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close