Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 파일을 읽는 방법

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 작은 파일과 큰 파일을 모두 읽을 수 있는 클래스입니다.