Java는 파일을 읽는 여러 방법을 제공합니다. 이러한 각 방법은 서로 다른 상황에서 서로 다른 유형의 파일을 읽는 데 적합합니다. 일부는 더 긴 파일을 읽는 데 더 좋고 다른 일부는 더 짧은 파일을 읽는 데 더 좋습니다.
이 자습서에서는 다음 Java 클래스를 사용하여 파일을 읽습니다.
- BufferedReader
- 파일
- 스캐너
튜토리얼 전체에서 src
에 저장된 파일을 사용하고 있습니다. 파일 경로가 src/file.txt
인 디렉토리 .
계속하기 전에 이 파일에 여러 줄의 텍스트를 저장하십시오.
참고:최상의 코딩 방법을 따르기 위해 이러한 구현을 사용할 때 오류를 적절하게 처리해야 합니다.BufferedReader를 사용하여 Java에서 텍스트 파일 읽기
BufferedReader
클래스는 문자 입력 스트림을 읽습니다. 읽기 프로세스를 보다 효율적으로 만들기 위해 기본 크기가 8KB인 버퍼의 문자를 버퍼링합니다. 파일을 한 줄씩 읽으려면 BufferedReader를 사용하는 것이 좋습니다.
BufferedReader
대용량 파일을 읽는 데 효율적입니다.
import java.io.*;
public class FileReaderWithBufferedReader {
public static void main(String[] args) throws IOException{We
String file = "src/file.txt";
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String curLine;
while ((curLine = bufferedReader.readLine()) != null){
//process the line as required
System.out.println(curLine);
}
bufferedReader.close();
}
}
readline()
메소드는 파일 끝에 도달하면 null을 반환합니다.
BufferedReader를 사용하여 Java에서 UTF-8 인코딩 파일 읽기
BufferedReader
를 사용할 수 있습니다. UTF-8로 인코딩된 파일을 읽는 클래스입니다.
이번에는 InputStreamReader
를 전달합니다. BufferedReader
생성 시 객체 인스턴스.
import java.io.*;
public class EncodedFileReaderWithBufferedReader {
public static void main(String[] args) throws IOException {
String file = "src/fileUtf8.txt";
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
String curLine;
while ((curLine = bufferedReader.readLine()) != null){
//process the line as you require
System.out.println(curLine);
}
}
}
Java 파일 클래스를 사용하여 파일 읽기
자바 Files
Java NIO의 Java 7에 도입된 클래스는 파일에서 작동하는 정적 메서드로 완전히 구성됩니다.
Files
사용 클래스에서 파일의 전체 내용을 배열로 읽을 수 있습니다. 따라서 작은 파일을 읽는 데 적합합니다.
이 두 시나리오에서 Files 클래스를 사용하는 방법을 살펴보겠습니다.
파일 클래스를 사용하여 Java에서 작은 파일 읽기
readAllLines()
Files
메소드 클래스는 파일의 전체 내용을 읽을 수 있도록 하고 배열의 각 줄을 문자열로 저장합니다.
Path
를 사용할 수 있습니다. Files
이후의 파일 경로를 가져오는 클래스 클래스는 Path
를 허용합니다. 파일의 개체입니다.
import java.io.IOException;
import java.nio.file.*;
import java.util.*;
public class SmallFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = "src/file.txt";
Path path = Paths.get(file);
List<String> lines = Files.readAllLines(path);
}
}
readAllBytes()
를 사용할 수 있습니다. 파일에 저장된 데이터를 문자열 배열 대신 바이트 배열로 검색합니다.
byte[] bytes = Files.readAllBytes(path);
파일 클래스를 사용하여 Java에서 대용량 파일 읽기
Files
로 대용량 파일을 읽고 싶다면 클래스에서 newBufferedReader()
를 사용할 수 있습니다. BufferedReader
의 인스턴스를 얻는 메소드 클래스를 만들고 BufferedReader
를 사용하여 파일을 한 줄씩 읽습니다. .
import java.io.*;
import java.nio.file.*;
public class LargeFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = "src/file.txt";
Path path = Paths.get(file);
BufferedReader bufferedReader = Files.newBufferedReader(path);
String curLine;
while ((curLine = bufferedReader.readLine()) != null){
System.out.println(curLine);
}
bufferedReader.close();
}
}
Files.lines()로 파일 읽기
Java 8은 전체 파일을 Stream
으로 읽는 새로운 메소드를 Files 클래스에 도입했습니다. 문자열.
import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;
public class FileReaderWithFilesLines {
public static void main(String[] args) throws IOException {
String file = "src/file.txt";
Path path = Paths.get(file);
Stream<String> lines = Files.lines(path);
lines.forEach(s -> System.out.println(s));
lines.close();
}
}
스캐너를 사용하여 Java에서 텍스트 파일 읽기
Scanner
클래스는 지정된 구분 기호를 사용하여 파일 내용을 부분으로 나누고 부분별로 읽습니다. 이 접근 방식은 구분 기호로 구분된 콘텐츠를 읽는 데 가장 적합합니다.
예를 들어, Scanner
class는 공백으로 구분된 정수 목록이나 쉼표로 구분된 문자열 목록을 읽는 데 이상적입니다.
Scanner
의 기본 구분 기호 클래스는 공백입니다. 그러나 구분 기호를 다른 문자나 정규식으로 설정할 수 있습니다. next()
와 같은 다양한 next 메소드도 있습니다. , nextInt()
, nextLine()
및 nextByte()
, 콘텐츠를 다른 유형으로 변환합니다.
import java.io.IOException;
import java.util.Scanner;
import java.io.File;
public class FileReaderWithScanner {
public static void main(String[] args) throws IOException{
String file = "src/file.txt";
Scanner scanner = new Scanner(new File(file));
scanner.useDelimiter(" ");
while(scanner.hasNext()){
String next = scanner.next();
System.out.println(next);
}
scanner.close();
}
}
위의 예에서 구분 기호를 공백으로 설정하고 next()
를 사용합니다. 공백으로 구분된 내용의 다음 부분을 읽는 방법입니다.
전체 파일 읽기
Scanner
를 사용할 수 있습니다. 루프를 실행하지 않고 한 번에 전체 파일을 읽는 클래스. “\\Z”
를 전달해야 합니다. 이 구분 기호로 사용합니다.
scanner.useDelimiter("\\Z");
System.out.println(scanner.next());
scanner.close();
참고:Scanner 클래스는 동기화되지 않으므로 스레드로부터 안전하지 않습니다. 결론
이 튜토리얼에서 보았듯이 Java는 텍스트 파일을 읽는 작업의 특성에 따라 선택할 수 있는 많은 방법을 제공합니다. BufferedReader
를 사용할 수 있습니다. 큰 파일을 한 줄씩 읽습니다.
내용이 구분 기호로 구분된 파일을 읽으려면 Scanner
를 사용하세요. 수업.
또한 Java NIO Files
작은 파일과 큰 파일을 모두 읽을 수 있는 클래스입니다.