반응형
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
- ArrayList
- list
- date
- CMD
- 테이블
- Files
- vscode
- 자바
- table
- Button
- Maven
- javascript
- Array
- 문자열
- string
- Visual Studio Code
- 자바스크립트
- json
- IntelliJ
- 이탈리아
- CSS
- js
- html
- windows
- 이클립스
- 인텔리제이
- 배열
- Java
- input
- Eclipse
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