반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Maven
- 정규식
- windows
- 이탈리아
- javascript
- 자바스크립트
- date
- string
- 문자열
- 테이블
- Array
- list
- json
- IntelliJ
- CMD
- html
- js
- Eclipse
- table
- Visual Studio Code
- 이클립스
- ArrayList
- 인텔리제이
- Java
- 자바
- CSS
- vscode
- 배열
- Button
- input
Archives
- Today
- Total
어제 오늘 내일
[Java] 텍스트 파일의 마지막 라인부터 읽기 본문
Java API를 이용하여, 파일을 다루는 방법을 알아보고 있습니다.
[Java] 파일 생성하는 3가지 방법 (File, FileOutputStream, Files)
이번에는,
텍스트 파일의 마지막 라인을 읽는 방법,
텍스트 파일의 끝에서 n개의 라인을 읽는 방법을 소개합니다.
- RandomAccessFile ( Java API)
- 마지막 라인 읽기
- 끝에서 3줄 읽기
- ReversedLinesFileReader ( Apache Common IO )
- 마지막 라인 읽기
- 끝에서 3줄 읽기
0. 텍스트 파일 준비
테스트를 위한 텍스트 파일("text_file.txt")을 준비합니다.
line 1 line 2 line 3 line 4 line 5
1. RandomAccessFile ( Java API)
java.io.RandomAccessFile 클래스를 사용하면,
파일 포인터를 이용하여, 파일의 임의의 위치에 접근할 수 있습니다.
1.1 마지막 라인 읽기
import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class ReadLastLine { public static void main(String[] args) { try { // 1. RandomAcessFile, 마지막 라인을 담을 String RandomAccessFile randomAccessFile = new RandomAccessFile("d:\\example\\text_file.txt", "r"); StringBuffer lastLine = new StringBuffer(); // 2. 전체 파일 길이 long fileLength = randomAccessFile.length(); // 3. 포인터를 이용하여 뒤에서부터 앞으로 데이터를 읽는다. for (long pointer = fileLength - 1; pointer >= 0; pointer--) { // 3.1. pointer를 읽을 글자 앞으로 옮긴다. randomAccessFile.seek(pointer); // 3.2. pointer 위치의 글자를 읽는다. char c = (char) randomAccessFile.read(); // 3.3. 줄바꿈이 나타나면 더 이상 글자를 읽지 않는다. if (c == '\n') { break; } // 3.4. 결과 문자열의 앞에 읽어온 글자(c)를 붙여준다. lastLine.insert(0, c); } // 4. 결과 출력 System.out.println(lastLine); // line 5 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
1.1 결과
line 5
1.2 끝에서 3줄 읽기
import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class ReadLastLine { public static void main(String[] args) { try { // 1. RandomAcessFile, 마지막 라인을 담을 String, 읽을 라인 수 RandomAccessFile randomAccessFile = new RandomAccessFile("d:\\example\\text_file.txt", "r"); StringBuffer lastLine = new StringBuffer(); int lineCount = 3; // 2. 전체 파일 길이 long fileLength = randomAccessFile.length(); // 3. 포인터를 이용하여 뒤에서부터 앞으로 데이터를 읽는다. for (long pointer = fileLength - 1; pointer >= 0; pointer--) { // 3.1. pointer를 읽을 글자 앞으로 옮긴다. randomAccessFile.seek(pointer); // 3.2. pointer 위치의 글자를 읽는다. char c = (char) randomAccessFile.read(); // 3.3. 줄바꿈이 3번(lineCount) 나타나면 더 이상 글자를 읽지 않는다. if (c == '\n') { lineCount--; if (lineCount == 0) { break; } } // 3.4. 결과 문자열의 앞에 읽어온 글자(c)를 붙여준다. lastLine.insert(0, c); } // 4. 결과 출력 System.out.println(lastLine); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
1.2 결과
line 3 line 4 line 5
2. ReversedLinesFileReader ( Apache Common IO )
Apache Common IO의 ReversedLinesFileReader 클래스는
파일을 뒤에서부터 거꾸로 읽어줍니다.
다음의 2가지 메소드를 사용하여, 뒤에서부터 파일을 읽을 수 있습니다.
public String readLine()
파일의 뒤에서 1줄을 읽어서 리턴합니다.
만약, 더 이상 읽을 라인이 없으면(파일의 시작점에 도착하면) null을 리턴합니다.
public List<String> readLines(int lineCount)
파일의 뒤에서, 파라미터로 전달된 lineCount만큼 라인을 읽어서 리턴합니다.
만약, 파라미터로 전달된 line수보다 실제 라인수가 더 적으면,
실제 라인수만큼만 읽어서 데이터를 리턴합니다.
2.1 마지막 라인 읽기
import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import org.apache.commons.io.input.ReversedLinesFileReader; public class ReadLastLine { public static void main(String[] args) { // 0. 파일 준비 File file = new File("D:\\example\\text_file.txt"); try { // 1. ReversedLinesFileReader 준비 ReversedLinesFileReader reader = new ReversedLinesFileReader(file, Charset.forName("UTF-8")); // 2. 뒤에서 1줄 읽기 String lastLine = reader.readLine(); // 3. 결과 출력 System.out.println(lastLine); } catch (IOException e) { e.printStackTrace(); } } }
2.1 결과
line 5
2.2 끝에서 3줄 읽기
import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.List; import org.apache.commons.io.input.ReversedLinesFileReader; public class ReadLastLine { public static void main(String[] args) { // 0. 파일 준비 File file = new File("D:\\example\\text_file.txt"); try { // 1. ReversedLinesFileReader 준비 ReversedLinesFileReader reader = new ReversedLinesFileReader(file, Charset.forName("UTF-8")); // 2. 뒤에서 3줄 읽기 List<String> lines = reader.readLines(3); // 3. 결과 출력 System.out.println(lines); // [line 5, line 4, line 3] } catch (IOException e) { e.printStackTrace(); } } }
2.2 결과
[line 5, line 4, line 3]
Java API와 Apache Common IO를 이용하여
파일을 뒤에서부터 읽는 방법을 알아보았습니다.
반응형
'IT > Java' 카테고리의 다른 글
[Java] 배열 합치기 (0) | 2021.06.06 |
---|---|
[Java] 파일 특정 라인 읽기 (0) | 2021.06.06 |
[Java] Text 파일 라인수 세기 (0) | 2021.06.06 |
[Java] 파일 최종수정일자 변경하기 (0) | 2021.06.05 |
[Java] 파일의 최종 수정일자 조회 (0) | 2021.06.05 |
Comments