Java를 사용하여 큰 텍스트 파일을 한 줄씩 읽는 방법은 무엇입니까?


846

Java를 사용하여 줄당 약 5-6GB의 큰 텍스트 파일을 읽어야합니다.

어떻게 빨리 할 수 ​​있습니까?


69
@kamaci et. 알. 이 질문은 중복으로 표시되어서는 안됩니다. "마지막 줄을 빨리 읽는다"는 대안이 아니며 "텍스트 파일을 한 줄씩 읽는 가장 빠른 방법"인지 여부에 대해서는 논란의 여지가 있습니다. 무언가를하는 가장 빠른 방법은 반드시 일반적인 방법은 아닙니다. 또한 아래 답변에는 코드가 포함되어 있지만 가장 관련성이 높은 대안은 없습니다. 이 질문은 유용합니다. 현재 "java read file by line"에 대한 최상위 Google 검색 결과입니다. 마지막으로 스택 오버플로에 도달하여 매 2 질문마다 1이 처리 대상으로 표시됩니다.
Patrick Cullen

5
다음 은 6 가지 가능한 구현의 속도를 비교 한 것입니다.
Serg M Ten

4
이벤트는 SO의 긴밀한 정책이 짜증 난다고 주장하는 의견을 읽었지만 SO는 그 정책을 유지합니다. 모든 비용으로 중복을 피하기를 원하는 개발자의 관점은 좁습니다! 그냥 내버려둬! 크림이 맨 위로 올라가고 sh * t가 저절로 아래로 가라 앉습니다. 이전에 질문을 받았지만 (질문이 아닙니까 ??), 새로운 질문이 더 잘 표현하거나, 더 나은 답변을 얻거나, 검색 엔진에서 더 높은 순위를 매길 수 없다는 것을 의미하지는 않습니다. 질문은 이제 '보호'....
Stijn de Witt

3
제목을 읽는 것만으로도 질문이 중복으로 표시되는 것은 놀라운 일입니다.
Luke

답변:


1063

일반적인 패턴은

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
       // process the line.
    }
}

문자 인코딩이 없다고 가정하면 데이터를 더 빨리 읽을 수 있습니다. 예를 들어 ASCII-7이지만 별 차이가 없습니다. 데이터 작업이 훨씬 오래 걸릴 가능성이 높습니다.

편집 : line누출 범위를 피하기 위해 덜 일반적인 패턴을 사용하십시오 .

try(BufferedReader br = new BufferedReader(new FileReader(file))) {
    for(String line; (line = br.readLine()) != null; ) {
        // process the line.
    }
    // line is not visible here.
}

업데이트 : Java 8에서는 할 수 있습니다

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
        stream.forEach(System.out::println);
}

참고 : #close 메서드가 호출되도록 하려면 스트림을 리소스 를 사용하여 시도 블록에 배치해야합니다. 그렇지 않으면 기본 파일 핸들이 GC가 훨씬 나중에 처리 할 때까지 닫히지 않습니다.


6
적절한 예외 처리에서이 패턴은 어떻게 생깁니 까? br.close ()는 IOException을 발생 시키는데 놀랍습니다. 어쨌든 읽기 위해 열린 파일을 닫을 때 어떻게 될 수 있습니까? FileReader의 생성자가 FileNotFound 예외를 발생시킬 수 있습니다.
MikeB

3
200MB 파일이 있고 90MB / s로 읽을 수 있다면 ~ 3 초가 걸릴 것으로 예상됩니까? 이 "느린"독서 방식으로 몇 분이 걸리는 것 같습니다. SSD를 사용하므로 읽기 속도가 문제가되지 않습니까?
Jiew Meng

4
@JiewMeng 그래서 당신이하고있는 다른 일이 시간이 걸리고 있다고 생각합니다. 당신은 단지 파일의 라인을 읽어보세요 수 아무것도 다른 사람을.
Peter Lawrey

44
for(String line = br.readLine(); line != null; line = br.readLine()), BTW 자바 8에 당신이 할 수있는 try( Stream<String> lines = Files.lines(...) ){ for( String line : (Iterable<String>) lines::iterator ) { ... } }증오에 어렵지 않다 어느.
Aleksandr Dubinsky

26
@AleksandrDubinsky Java 8에서 클로저로 발생하는 문제는 코드가 읽기 쉽도록 (더 느리고 느리게) 매우 쉽게 작성된다는 것입니다. "쿨"하기 때문에 많은 개발자가 코드를 과도하게 사용하는 것을 볼 수 있습니다.
Peter Lawrey

155

이 블로그를보십시오 :

버퍼 크기를 지정하거나 기본 크기를 사용할 수 있습니다. 대부분의 경우 기본값은 충분히 큽니다.

// Open the file
FileInputStream fstream = new FileInputStream("textfile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

String strLine;

//Read File Line By Line
while ((strLine = br.readLine()) != null)   {
  // Print the content on the console
  System.out.println (strLine);
}

//Close the input stream
fstream.close();

6
내 파일은 1.5 공연이며 답변을 사용하여 파일을 읽을 수 없습니다!
Aboozar Rajabi

3
@AboozarRajabi 물론 가능합니다. 이 코드는 모든 텍스트 파일을 읽을 수 있습니다.
user207421

10
품질이 좋지 않은 링크로 다운 보트되었습니다. 완전히 무의미 DataInputStream하며 잘못된 스트림이 닫힙니다. Java Tutorial에는 아무런 문제가 없으며 이와 같이 임의의 타사 인터넷 쓰레기를 인용 할 필요가 없습니다.
user207421

1
주석을 버리고, 6 줄의 코드에 대해 4 줄의 100 % 중복 주석이 있습니다.
버팔로

97

Java 8이 종료되면 (2014 년 3 월) 스트림을 사용할 수 있습니다.

try (Stream<String> lines = Files.lines(Paths.get(filename), Charset.defaultCharset())) {
  lines.forEachOrdered(line -> process(line));
}

파일의 모든 줄을 인쇄 :

try (Stream<String> lines = Files.lines(file, Charset.defaultCharset())) {
  lines.forEachOrdered(System.out::println);
}

1
을 사용 StandardCharsets.UTF_8하고 Stream<String>간결하게 사용 forEach()하고 forEachOrdered()이유가없는 한 특히 사용 하지 않는 것이 좋습니다.
Aleksandr Dubinsky

2
왜 forEach ()를 피해야합니까? 나빠요?
steventrouble

forEachOrdered 대신에 forEach를 사용하면 행이 순서대로 인쇄되지 않습니까?
msayag

2
@steventrouble 다음을 살펴보십시오. stackoverflow.com/questions/16635398 / ... 같은 짧은 함수 참조를 전달하면 나쁘지 forEach(this::process)않지만 코드 블록을 람다 안에 람다로 쓰면 추악 해집니다 forEach().
Aleksandr Dubinsky

2
@msayag, 맞습니다 forEachOrdered. 순서대로 실행 하려면 필요합니다 . 파일에 수천 줄이 없으면 병렬화가 켜지지 않지만이 경우 스트림을 병렬화 할 수 없습니다.
Aleksandr Dubinsky 2015 년

38

다음은 Java 7 이전에 대한 전체 오류 처리 및 지원 문자 세트 스펙이있는 샘플입니다. Java 7에서는 try-with-resources 구문을 사용하여 코드를 더 깨끗하게 만들 수 있습니다.

기본 문자셋 만 원하면 InputStream을 건너 뛰고 FileReader를 사용할 수 있습니다.

InputStream ins = null; // raw byte-stream
Reader r = null; // cooked reader
BufferedReader br = null; // buffered for readLine()
try {
    String s;
    ins = new FileInputStream("textfile.txt");
    r = new InputStreamReader(ins, "UTF-8"); // leave charset out for default
    br = new BufferedReader(r);
    while ((s = br.readLine()) != null) {
        System.out.println(s);
    }
}
catch (Exception e)
{
    System.err.println(e.getMessage()); // handle exception
}
finally {
    if (br != null) { try { br.close(); } catch(Throwable t) { /* ensure close happens */ } }
    if (r != null) { try { r.close(); } catch(Throwable t) { /* ensure close happens */ } }
    if (ins != null) { try { ins.close(); } catch(Throwable t) { /* ensure close happens */ } }
}

전체 오류 처리가 포함 된 Groovy 버전은 다음과 같습니다.

File f = new File("textfile.txt");
f.withReader("UTF-8") { br ->
    br.eachLine { line ->
        println line;
    }
}

1
ByteArrayInputStream문자열 리터럴 로 피드는 큰 텍스트 파일을 읽는 것과 어떤 관련이 있습니까?
user207421

절대 쓸모없는 닫힙니다. 모든 스트림을 닫을 이유가 없습니다. 해당 스트림 중 하나를 닫으면 다른 모든 스트림도 자동으로 닫힙니다.
Enerccio

21

Java 8에서는 다음을 수행 할 수 있습니다.

try (Stream<String> lines = Files.lines (file, StandardCharsets.UTF_8))
{
    for (String line : (Iterable<String>) lines::iterator)
    {
        ;
    }
}

일부 참고 사항 : Files.lines(대부분의 스트림과 달리) 반환 된 스트림을 닫아야합니다. 여기에 언급 된 이유로 나는을 사용하지 마십시오 forEach(). 이상한 코드 (Iterable<String>) lines::iterator는 Stream을 Iterable로 캐스팅합니다.


Iterable이 코드를 구현하지 않으면 유용하지만 확실하게 추악 합니다. (Iterable<String>)작동하려면 캐스트 (예 :)가 필요합니다 .
Stephan

이 방법으로 첫 줄을 건너 뛰려면 어떻게해야합니까?
qed

2
@qedfor(String line : (Iterable<String>) lines.skip(1)::iterator)
Aleksandr Dubinsky

1
당신은 실제로 사용하려는하지 않는 경우 Stream사용하는 기능을 Files.newBufferedReader대신 Files.lines반복적으로 호출 readLine()할 때까지 null대신 같은 구조를 사용하여 (Iterable<String>) lines::iterator... 훨씬 더 간단 것 같다
홀거

:: in lines :: iterator를 왜 사용합니까? 내가 아는 사용법은 메소드 이름을 람다 함수로 패키지하는 것입니다. for 루프 매개 변수 이후 : ::를 사용하여 람다 방법을 얻는 동안 변수가 있어야합니다 :
Trismegistos

19

수행 할 수있는 작업은 스캐너를 사용하여 전체 텍스트를 스캔하고 텍스트를 한 줄씩 살펴 보는 것입니다. 물론 다음을 가져와야합니다.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public static void readText throws FileNotFoundException {
    Scanner scan = new Scanner(new File("samplefilename.txt"));
    while(scan.hasNextLine()){
        String line = scan.nextLine();
        //Here you can manipulate the string the way you want
    }
}

스캐너는 기본적으로 모든 텍스트를 스캔합니다. while 루프는 전체 텍스트를 탐색하는 데 사용됩니다.

.hasNextLine()함수는 텍스트에 줄이 더 있으면 true를 반환하는 부울입니다. 이 .nextLine()함수는 전체 줄을 String으로 제공하여 원하는 방식으로 사용할 수 있습니다. System.out.println(line)텍스트를 인쇄 해보십시오 .

참고 : .txt는 파일 형식 텍스트입니다.


ʻpublic static void readText는 FileNotFoundException ()을 던집니다. {´처럼 : ´public static void readText ()는 FileNotFoundException을 던졌습니다 { '
Ketcomp

이것은보다 속도가 느리고 BufferedReader.readLine()최고 성능의 방법을 요청했습니다.
user207421

18

FileReader에서 인코딩 InputStreamReader을 지정할 수 없으므로 지정해야 할 경우 대신 사용하십시오.

try {
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "Cp1252"));         

    String line;
    while ((line = br.readLine()) != null) {
        // process the line.
    }
    br.close();

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

Windows에서이 파일을 가져온 경우 ANSI 인코딩 (Cp1252)이있을 수 있으므로 인코딩을 지정해야합니다.


17

Java로 파일을 읽는 10 가지 방법을 문서화하고 테스트 한 다음 테스트 파일에서 1KB에서 1GB까지 읽도록하여 서로 실행했습니다. 1GB 테스트 파일을 읽는 가장 빠른 3 가지 파일 읽기 방법은 다음과 같습니다.

성능 테스트를 실행할 때 콘솔에 아무것도 출력하지 않으므로 테스트 속도가 느려집니다. 나는 단지 원시 읽기 속도를 테스트하고 싶었다.

1) java.nio.file.Files.readAllBytes ()

Java 7, 8, 9에서 테스트되었습니다. 이것은 전체적으로 가장 빠른 방법이었습니다. 1GB 파일을 읽는 것은 1 초도 채 걸리지 않았습니다.

import java.io..File;
import java.io.IOException;
import java.nio.file.Files;

public class ReadFile_Files_ReadAllBytes {
  public static void main(String [] pArgs) throws IOException {
    String fileName = "c:\\temp\\sample-1GB.txt";
    File file = new File(fileName);

    byte [] fileBytes = Files.readAllBytes(file.toPath());
    char singleChar;
    for(byte b : fileBytes) {
      singleChar = (char) b;
      System.out.print(singleChar);
    }
  }
}

2) java.nio.file.Files.lines ()

이것은 Java 8 및 9에서 성공적으로 테스트되었지만 람다 식에 대한 지원이 없기 때문에 Java 7에서는 작동하지 않습니다. 1GB 파일을 읽는 데 약 3.5 초가 걸렸으며 더 큰 파일을 읽는 경우에는 2 위를 차지했습니다.

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.stream.Stream;

public class ReadFile_Files_Lines {
  public static void main(String[] pArgs) throws IOException {
    String fileName = "c:\\temp\\sample-1GB.txt";
    File file = new File(fileName);

    try (Stream linesStream = Files.lines(file.toPath())) {
      linesStream.forEach(line -> {
        System.out.println(line);
      });
    }
  }
}

3) 버퍼 리더

Java 7, 8, 9에서 작동하도록 테스트되었습니다. 1GB 테스트 파일을 읽는 데 약 4.5 초가 걸렸습니다.

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

public class ReadFile_BufferedReader_ReadLine {
  public static void main(String [] args) throws IOException {
    String fileName = "c:\\temp\\sample-1GB.txt";
    FileReader fileReader = new FileReader(fileName);

    try (BufferedReader bufferedReader = new BufferedReader(fileReader)) {
      String line;
      while((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
      }
    }
  }

10 가지 파일 읽기 방법에 대한 전체 순위는 여기에서 확인할 수 있습니다 .


1
당신의 가이드는 놀랍습니다 :)
파이살 Julaidan

당신은 대부분 System.out.print/println()여기 타이밍입니다 ; 또한 처음 두 경우에 파일이 메모리에 적합하다고 가정합니다.
user207421

그럴 수 있지. 어쩌면 나는 그 대답을 더 명확하게 가정 할 수 있었을 것입니다.
gomisha

16

자바 7 :

String folderPath = "C:/folderOfMyFile";
Path path = Paths.get(folderPath, "myFileName.csv"); //or any text file eg.: txt, bat, etc
Charset charset = Charset.forName("UTF-8");

try (BufferedReader reader = Files.newBufferedReader(path , charset)) {
  while ((line = reader.readLine()) != null ) {
    //separate all csv fields into string array
    String[] lineVariables = line.split(","); 
  }
} catch (IOException e) {
    System.err.println(e);
}

9
알고! 필드에 쉼표가 있고 따옴표로 묶인 경우 line.split을 사용하면 올바르게 구문 분석되지 않습니다. 이 분할은이를 무시하고 내부 쉼표를 사용하여 필드를 청크로 구분합니다. HTH, 마르셀로
Marcelo Finki

CSV : 쉼표로 구분 된 값 파일이므로 다른 필드를 추가하려는 경우가 아니라면 CSV 필드에 쉼표를 사용하지 마십시오. 에 따라서, 사용 분할 쉼표 토큰 자바 CSV 파일을 구문 분석하는 것은 완벽하게 정상적으로 오른쪽 때
디에고 아르테

7
Diego, 이것은 정확하지 않습니다. 유일한 CSV 표준 (RFC 4180)은 "CRLF (줄 바꿈), 큰 따옴표 및 쉼표가 포함 된 필드는 큰 따옴표로 묶어야합니다."라고 구체적으로 말합니다.
serg.nechaev

2
다음 StandardCharsets.UTF_8에서 확인 된 예외를 피하기 위해 사용Charset.forName("UTF-8")
Aleksandr Dubinsky

2
귀하의 의견에 "Diego Duarte"감사합니다. "serg.nechaev"의 답변에 동의해야합니다. CSV 파일에 쉼표가 '항상'포함되어 있습니다. 사람들은 이것이 받아 들여지기를 기대합니다. 모든 것을 존중합니다. "serg.nechaev"덕분에 큰 감사를드립니다. 당신이 옳습니다. 모두를 격려하십시오.
Marcelo Finki 2016 년

13

Java 8에는을 사용하는 대신 사용할 수도 Files.lines()있습니다. 입력 소스가 파일이 아니라 a Reader또는 a와 같은 더 추상적 인 경우 s 메소드 를 통해 행을 스트리밍InputStream 할 수 있습니다 .BufferedReaderlines()

예를 들면 다음과 같습니다.

try (BufferedReader reader = new BufferedReader(...)) {
  reader.lines().forEach(line -> processLine(line));
}

에서 processLine()읽은 각 입력 줄 을 호출 합니다 BufferedReader.


10

를 들어 파일을 읽는 자바 (8)

package com.java.java8;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;

/**
 * The Class ReadLargeFile.
 *
 * @author Ankit Sood Apr 20, 2017
 */
public class ReadLargeFile {

    /**
     * The main method.
     *
     * @param args
     *            the arguments
     */
    public static void main(String[] args) {
        try {
            Stream<String> stream = Files.lines(Paths.get("C:\\Users\\System\\Desktop\\demoData.txt"));
            stream.forEach(System.out::println);
        }
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

9

스캐너 클래스를 사용할 수 있습니다

Scanner sc=new Scanner(file);
sc.nextLine();

2
@Tim 'Bomb horribly'는 CS에서 인식하는 용어가 아닙니다. 정확히 무엇을 의미합니까?
user207421

아래로 내려 가서 매우 느리게 실행되며 충돌 가능성이 높습니다. 아마이 사이트에 숙어를 피해야한다)

4
@Tim 왜 그렇게하겠습니까?
xehpuk

2
사용하는 Scanner것은 좋지만이 답변에는 올바르게 사용하기위한 전체 코드가 포함되어 있지 않습니다.
Aleksandr Dubinsky

5
@Tim이 코드는 '폭탄', '붕괴', '매우 느리게 실행', '가장 충돌 가능성'이 아닙니다. 실제로 기록 된대로 거의 한 줄만 읽게됩니다. BufferedReader.readLine()확실히 몇 배나 빠르지 만이 방법으로 초당 메가 바이트를 읽을 수 있습니다 . 다르게 생각하면 이유를 알려주십시오.
user207421

7

readLine()방법 을 사용해야합니다 class BufferedReader. 해당 클래스에서 새 오브젝트를 작성하고이 메소드를 조작하여 문자열에 저장하십시오.

BufferReader Javadoc


BufferReaderAPI에 대한 링크가 끊어진 것 같습니다
Sandeep

6

이를 달성하는 명확한 방법은

예를 들면 다음과 같습니다.

dataFile.txt현재 디렉토리에 있다면

import java.io.*;
import java.util.Scanner;
import java.io.FileNotFoundException;

public class readByLine
{
    public readByLine() throws FileNotFoundException
    {
        Scanner linReader = new Scanner(new File("dataFile.txt"));

        while (linReader.hasNext())
        {
            String line = linReader.nextLine();
            System.out.println(line);
        }
        linReader.close();

    }

    public static void main(String args[])  throws FileNotFoundException
    {
        new readByLine();
    }
}

아래와 같은 출력 여기에 이미지 설명을 입력하십시오


왜 더 명확합니까? 그리고 여기에 텍스트 사진을 올리지 마십시오. 텍스트를 게시하십시오.
user207421

사진을 게시했습니다. 텍스트 사진입니다. 이 페이지에 직접 텍스트를 잘라 붙여 넣을 수 있습니다. 아무도 프로그램 게시에 대해 아무 말도하지 않았습니다. 텍스트 사진을 게시하는 것은 내가 신경 쓰지 않는 시간 낭비와 내가하는 대역폭입니다.
user207421

6

자바 9 :

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
    stream.forEach(System.out::println);
}

2
나는 당신이 생각System.getProperty("os.name").equals("Linux")
SpringLearner

5
문자열을 ==! 와 비교하지 마십시오 .
JonasCz-복원 모니카

6
이것은 이미 다른 사람들이 게시 한 표준 Java 8 예제입니다. 이것이 "Java-9"라고 주장하는 이유는 무엇입니까?
Holger

그가 언급하지 않은 @Holger 메모리 매핑 파일은 무엇입니까?
유진

한 줄씩 처리하려면 (Stream <String> stream = Files.lines (Paths.get (inputFile))) {stream.forEach ((line)-> {System.out.println (line);} ); }
thanos.a

3
BufferedReader br;
FileInputStream fin;
try {
    fin = new FileInputStream(fileName);
    br = new BufferedReader(new InputStreamReader(fin));

    /*Path pathToFile = Paths.get(fileName);
    br = Files.newBufferedReader(pathToFile,StandardCharsets.US_ASCII);*/

    String line = br.readLine();
    while (line != null) {
        String[] attributes = line.split(",");
        Movie movie = createMovie(attributes);
        movies.add(movie);
        line = br.readLine();
    }
    fin.close();
    br.close();
} catch (FileNotFoundException e) {
    System.out.println("Your Message");
} catch (IOException e) {
    System.out.println("Your Message");
}

그것은 나를 위해 작동합니다. 희망도 당신을 도울 것입니다.


3

스트림을 사용하여보다 정확하게 수행 할 수 있습니다.

Files.lines(Paths.get("input.txt")).forEach(s -> stringBuffer.append(s);

2
나는 그것이 실제로 괜찮다는 것에 동의합니다. 아마도 사람들은 이상한 StringBuffer 선택 때문에 그것을 싫어합니다 (StringBuilder는 변수의 나쁜 이름 일지라도 일반적으로 선호됩니다). 또한 이미 위에서 언급했기 때문에.
Andrii Rubtsov

2

나는 보통 독서 루틴을 간단하게한다 :

void readResource(InputStream source) throws IOException {
    BufferedReader stream = null;
    try {
        stream = new BufferedReader(new InputStreamReader(source));
        while (true) {
            String line = stream.readLine();
            if(line == null) {
                break;
            }
            //process line
            System.out.println(line)
        }
    } finally {
        closeQuiet(stream);
    }
}

static void closeQuiet(Closeable closeable) {
    if (closeable != null) {
        try {
            closeable.close();
        } catch (IOException ignore) {
        }
    }
}

0

이 코드를 사용할 수 있습니다 :

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

public class ReadTextFile {

    public static void main(String[] args) throws IOException {

        try {

            File f = new File("src/com/data.txt");

            BufferedReader b = new BufferedReader(new FileReader(f));

            String readLine = "";

            System.out.println("Reading file using Buffered Reader");

            while ((readLine = b.readLine()) != null) {
                System.out.println(readLine);
            }

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

    }

}

순서대로 설명하겠습니다.
피터 Mortensen

0

org.apache.commons.io 패키지 를 사용하면 특히 Java 6 이하를 사용하는 레거시 코드에서 더 많은 성능을 제공했습니다.

Java 7에는 예외 처리가 적고 유용한 메소드가 더 나은 API가 있습니다.

LineIterator lineIterator = null;
try {
    lineIterator = FileUtils.lineIterator(new File("/home/username/m.log"), "windows-1256"); // The second parameter is optionnal
    while (lineIterator.hasNext()) {
        String currentLine = lineIterator.next();
        // Some operation
    }
}
finally {
    LineIterator.closeQuietly(lineIterator);
}

메이븐

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

0

Apache Commons IO를 사용할 수도 있습니다 .

File file = new File("/home/user/file.txt");
try {
    List<String> lines = FileUtils.readLines(file);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

3
FileUtils.readLines(file)더 이상 사용되지 않는 방법입니다. 또한이 메소드는 IOUtils.readLinesBufferedReader 및 ArrayList를 사용하는을 호출합니다 . 이것은 라인 단위 방식이 아니며, 몇 GB를 읽는 데 실용적이지 않습니다.
vallismortis 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.