자바: 텍스트 파일을 읽는 방법


공백문자로 구분된 값을 가지는 텍스트 파일을 읽고자 합니다. 어떻게 하면 될까요? 그리고 그 읽어온 값을 어떻게 배열 리스트에 저장할까요?

텍스트 파일 데이터의 예:

1 62 4 55 5 6 77

이 데이터를 읽어와서 [1, 62, 4, 55, 5, , 77]과 같은 배열리스트를 만들고 싶습니다. 자바로 어떻게 하면 좋을까요?

  • 2016년 05월 27일에 작성됨

조회수 546


1 답변


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

Files#readAllLines()를 사용하면 텍스트 파일의 데이터를 한 줄씩 읽어와서 List<String>으로 저장할 수 있습니다.

for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    // ...
}

튜토리얼: Basic I/O > File I/O > Reading, Writing and Creating text files


String#split()을 사용하면 정규표현식에 기반하여 String을 잘라낼 수 있습니다.

for (String part : line.split("\\s+")) {
    // ...
}

튜토리얼: Numbers and Strings > Strings > Manipulating Characters in a String


Integer#valueOf()를 사용하여 StringInteger로 변환할 수 있습니다.

Integer i = Integer.valueOf(part);

튜토리얼: Numbers and Strings > Strings > Converting between Numbers and Strings


List#add()를 사용해서 List에 데이터를 삽입할 수 있습니다.

numbers.add(i);

튜토리얼: Interfaces > The List Interface


그래서 요약하면 다음과 같이 구현할 수 있습니다. 단, 해당 파일은 단 하나의 문자열이라도 존재해야 하고요. 파일의 앞과 뒤에 화이트스페이스는 존재하면 안됩니다.

List<Integer> numbers = new ArrayList<>();
for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    for (String part : line.split("\\s+")) {
        Integer i = Integer.valueOf(part);
        numbers.add(i);
    }
}

만약 Java 8 버전을 사용한다면, Files#lines()로 시작하는 Stream API를 사용할 수도 있습니다.

List<Integer> numbers = Files.lines(Paths.get("/path/to/test.txt"))
    .map(line -> line.split("\\s+")).flatMap(Arrays::stream)
    .map(Integer::valueOf)
    .collect(Collectors.toList());

튜토리얼: Processing data with Java 8 streams

  • 2016년 05월 28일에 작성됨

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

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