Java - Text 파일을 읽는 다양한 방법 및 예제

JS · 30 Apr 2020

Text 파일을 읽는 다양한 방법이 있습니다.

  • BufferedReader
  • Files
  • commons-io의 FileUtils

예제를 통해 텍스트 파일을 읽는 방법을 알아보겠습니다.

BufferedReader을 이용하여 텍스트 파일 읽기

BufferedReader을 이용하여 텍스트 파일을 읽을 수 있습니다. BufferedReader의 생성자에 FileReader 객체를 인자로 전달하면 됩니다.

다음과 같이 text.txt 파일을 읽고 텍스트를 출력할 수 있습니다.

File file = new File("/home/mjs/test/text.txt");
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

readLine()는 더 이상 읽을 내용이 없으면 null을 리턴합니다.

실행해보면 결과는 다음과 같습니다.

Chicago – April 28, 2020 Society for Incentive Travel Excellence (SITE) will hold its third Covid-19 related webinar Friday, May 1, at 10AM (Chicago) 4PM (London) 11PM (Singapore).
With previous webinars having attracted a cumulative audience of over 700 incentive travel professionals, we now turn our attention to Health Security in a Post Covid-19 World.

Files를 이용하여 텍스트 파일 읽기

Files를 이용하여 텍스트 파일을 읽고 출력할 수 있습니다.

다음은 text.txt의 내용을 출력하는 코드입니다. readAllLines()는 파일의 문자열을 리스트로 리턴합니다.

try {
    Path path = Paths.get("/home/mjs/test/text.txt");
    List<String> lines = Files.readAllLines(path);
    for(String line : lines) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Files와 BufferedReader를 이용하려면 다음과 같이 구현할 수도 있습니다.

Path path = Paths.get("/home/mjs/test/text.txt");
try (BufferedReader reader = Files.newBufferedReader(path)) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

(newBufferedReader()는 Java8부터 사용가능한 것 같습니다.)

결과

Chicago – April 28, 2020 Society for Incentive Travel Excellence (SITE) will hold its third Covid-19 related webinar Friday, May 1, at 10AM (Chicago) 4PM (London) 11PM (Singapore).
With previous webinars having attracted a cumulative audience of over 700 incentive travel professionals, we now turn our attention to Health Security in a Post Covid-19 World.

commons-io 라이브러리를 이용하여 텍스트 파일 읽기

commons-io 라이브러리를 이용하여 파일을 읽을 수도 있습니다.

Gradle 프로젝트는 build.gradle의 dependencies에 다음과 같이 추가합니다.

dependencies {
  compile group: 'commons-io', name: 'commons-io', version: '2.6'
  ...
}

Maven 등의 다른 빌드시스템을 사용하는 프로젝트는 mvnrepository.com을 참고하셔서 설정하시면 됩니다.

다음은 commons-io의 FileUtils를 이용하여 파일을 읽는 코드입니다. readLines()는 인자로 encoding 타입을 받습니다. 그리고 문자열 리스트를 리턴합니다.

try {
    File file = new File("/home/mjs/test/text.txt");
    List<String> lines = FileUtils.readLines(file, "UTF-8");
    for(String line : lines) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

만약 List으로 받을 필요 없고, 모든 텍스트가 합쳐진 String 객체를 리턴 받아도 된다면 readFileToString()을 이용할 수도 있습니다.

System.out.println();
try {
    File file = new File("/home/mjs/test/text.txt");
    String strings = FileUtils.readFileToString(file, "UTF-8");
    System.out.println(strings);
} catch (IOException e) {
    e.printStackTrace();
}

실행 결과는 위의 코드들과 동일합니다. 단지 1개의 string으로 합쳐졌을 뿐입니다.(concatenated)

결과

Chicago – April 28, 2020 Society for Incentive Travel Excellence (SITE) will hold its third Covid-19 related webinar Friday, May 1, at 10AM (Chicago) 4PM (London) 11PM (Singapore).
With previous webinars having attracted a cumulative audience of over 700 incentive travel professionals, we now turn our attention to Health Security in a Post Covid-19 World.

참고