파일에 저장된 텍스트 데이터를 어떻게 문자열로 읽어오나요?


아래의 소스코드를 사용해 왔었고요. 그리고 이 방법이 적어도 제가 검색한 사이트에서 가장 많이 사용하는 방법처럼 보입니다.

자바에서 파일의 데이터를 문자열로 읽어오는 더 좋은 다른 방법이 있나요?

private String readFile(String file) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader (file));
    String         line = null;
    StringBuilder  stringBuilder = new StringBuilder();
    String         ls = System.getProperty("line.separator");

    try {
        while((line = reader.readLine()) != null) {
            stringBuilder.append(line);
            stringBuilder.append(ls);
        }

        return stringBuilder.toString();
    } finally {
        reader.close();
    }
}
  • 2016년 05월 28일에 작성됨

조회수 186


1 답변


좋아요
0
싫어요
채택취소하기

파일로부터 모든 텍스트를 읽어오기

자바 버전 7은 유틸리티 메소드를 사용한 쉽고 강력한 방법을 제공합니다.

static String readFile(String path, Charset encoding) 
  throws IOException 
{
  byte[] encoded = Files.readAllBytes(Paths.get(path));
  return new String(encoded, encoding);
}

파일로부터 텍스트를 한 줄씩 읽어오기

자바 버전 7은 List<String>이라는 파일의 텍스트를 한 줄씩 읽어오는 간편한 방법을 추가하였습니다. 이 방법은 라인 구분자들을 제거해서 한 줄씩 읽어옵니다.

ist<String> lines = Files.readAllLines(Paths.get(path), encoding);

메모리 사용

라인 구분자들을 보존할 수 있는 첫 번째 방법은 짧은 시간동안 원시 파일 데이터 (바이트 배열)과 디코드된 문자들 (파일에 8비트가 인코드되었다면, 메모리의 크기는 16비트)을 한번에 메모리에 저장하기 때문에 일시적으로 여러번 파일의 크기만큼 메모리를 요구할 수 있습니다.

라인별로 읽기 위한 두 번째 방법은 디코딩을 위한 입력 바이트 버퍼는 문서 전체를 포함할 필요가 없기 때문에, 좀 더 메모리를 효율적으로 사용합니다. 그러나 사용 가능한 메모리에 대해서 매우 큰 파일에는 여전히 적합하지는 않습니다.

큰 파일을 읽기 위해서 스트림으로부터 텍스트의 청크(chunk)를 읽고 그것을 처리하고, 그리고 나서 그 다음으로 이동하고, 동일한 고정 크기의 메모리 블록을 재사용하기 위한 다른 방법이 필요합니다. 여기서 "크다"라는 것은 컴퓨터의 공간에 따라 다릅니다. 요즘은 이 임계값 (threshold)는 기가바이트 정도가 될 것입니다.

문자 인코딩

질문의 예에서 빠진 것 하나는 문자 인코딩입니다. 설정하고자 하는 인코딩 값이 플랫폼에 기본적으로 정의되어 있는 경우도 있지만, 그것은 매우 드문 경우이다. 그래서 개발자는 문자 인코딩을 지정해서 정의할 수 있어야 합니다.

StandardCharsets 클래스는 모든 자바 실행 환경에서 요구되는 인코딩 값에 대한 상수를 정의하였습니다.

String content = readFile("test.txt", StandardCharsets.UTF_8);

Charset 클래스를 사용해서 해당 플랫폼의 기본값을 사용할 수도 있습니다.

String content = readFile("test.txt", Charset.defaultCharset());
  • 2016년 05월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close