자바: 텍스트 파일을 읽는 방법
조회수 7688회
공백문자로 구분된 값을 가지는 텍스트 파일을 읽고자 합니다. 어떻게 하면 될까요? 그리고 그 읽어온 값을 어떻게 배열 리스트에 저장할까요?
텍스트 파일 데이터의 예:
1 62 4 55 5 6 77
이 데이터를 읽어와서 [1, 62, 4, 55, 5, , 77]
과 같은 배열리스트를 만들고 싶습니다. 자바로 어떻게 하면 좋을까요?
1 답변
-
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()
를 사용하여String
을Integer
로 변환할 수 있습니다.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());
댓글 입력