일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Array
- list
- 이탈리아
- vscode
- 자바
- 이클립스
- Maven
- date
- table
- input
- Eclipse
- Java
- 테이블
- windows
- 문자열
- Files
- string
- Visual Studio Code
- IntelliJ
- 배열
- json
- ArrayList
- CSS
- CMD
- Button
- 인텔리제이
- 자바스크립트
- javascript
- js
- html
- Today
- Total
어제 오늘 내일
[Java] 파일 특정 라인 읽기 본문
Java에서 파일을 다루는 방법을 알아보고 있습니다.
[Java] 파일 생성하는 3가지 방법 (File, FileOutputStream, Files)
이번에는, 파일의 특정 라인을 읽는 방법을 알아보도록 하겠습니다.
- Files.readAllLines().get() - 파일 사이즈가 작을 경우
- Files.lines.skip() - 파일 사이즈가 클 경우
- Apache Common IO
0. 테스트 파일 준비
테스트를 위한 텍스트 파일("text_file.txt")을 준비합니다.
line 1
line 2
line 3
line 4
line 5
1. Files.readAllLines().get() - 파일 사이즈가 작을 경우
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadNthLine {
public static void main(String[] args) {
// 0. 파일 준비
Path path = Paths.get("D:\\example\\text_file.txt");
try {
// 1. 파일 전체 읽기
List<String> allLines = Files.readAllLines(path);
// 2. 3번째 라인 읽기
String nthLine = allLines.get(2);
// 3. 결과 출력
System.out.println(nthLine); // line 3
} catch (IOException e) {
e.printStackTrace();
}
}
}
List<String> allLines = Files.readAllLines(path);
readAllLines() 메소드는 파일의 모든 라인을 읽어서 List로 리턴합니다.
그리고, 우리는 결과로 받은 List에서 우리가 원하는 라인의 문자열을 꺼내서 쓸수 있습니다.
간결하지만, 파일이 클 경우, 파일 전체의 내용이 메모리에 다 올라가기 때문에
위 방법은 파일이 작은 경우 유용합니다.
2. Files.lines.skip() - 파일 사이즈가 클 경우
파일 사이즈가 클 경우, Stream을 사용해서, 특정 라인을 읽어올 수 있습니다.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class ReadNthLine {
public static void main(String[] args) {
// 0. 파일 준비
Path path = Paths.get("D:\\example\\text_file.txt");
try {
// 1. 파일 Stream 생성
Stream<String> stream = Files.lines(path);
// 2. 3번째 라인 찾기
String nthLine = stream.skip(2).findFirst().get();
// 3. 결과 출력
System.out.println(nthLine); // line 3
} catch (IOException e) {
e.printStackTrace();
}
}
}
Stream<String> stream = Files.lines(path);
Stream으로 파일의 모든 라인을 리턴합니다.
String nthLine = stream.skip(2).findFirst().get();
skip(n) - n개의 element를 제거한 후, 나머지 element로 구성된 stream을 리턴합니다.
즉, 여기서는 2번째 라인까지를 제거한 후, 3번째 라인부터 나머지 요소로 구성된 stream을 리턴합니다.
findFirst() - stream의 1번째 element를 나타내는 Optional을 리턴합니다.
get() - Optional의 값이 존재하면, 해당 값을 리턴합니다.
3. Apache Common IO
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
public class ReadNthLine {
public static void main(String[] args) {
// 0. 파일 준비
File file = new File("D:\\example\\text_file.txt");
try {
// 1. 파일 전체 읽기
List<String> lines = FileUtils.readLines(file, "UTF-8");
// 2. 3번째 라인 찾기
String nthLine = lines.get(2);
// 3. 결과 출력
System.out.println(nthLine); // line 3
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java에서 파일의 특정 라인을 읽는 방법을 알아보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] 줄바꿈 하기 (\n, \r, \r\n 의 차이) (3) | 2021.06.06 |
---|---|
[Java] 배열 합치기 (0) | 2021.06.06 |
[Java] 텍스트 파일의 마지막 라인부터 읽기 (0) | 2021.06.06 |
[Java] Text 파일 라인수 세기 (0) | 2021.06.06 |
[Java] 파일 최종수정일자 변경하기 (0) | 2021.06.05 |