자바에서 파일을 읽는 방법


개요

이 자습서에서는 Java의 파일에서 읽는 다양한 방법을 살펴 봅니다. .

먼저, 표준 Java 클래스를 사용하여 클래스 경로, URL 또는 JAR 파일에서 파일을로드하는 방법을 배웁니다.

둘째, 방법을 살펴 봅니다. BufferedReader, Scanner, StreamTokenizer, DataInputStream, SequenceInputStream 및 FileChannel을 사용하여 콘텐츠를 읽을 수 있습니다. 또한 UTF-8로 인코딩 된 파일을 읽는 방법에 대해서도 설명합니다.

마지막으로로드 할 새로운 기술을 살펴 보겠습니다. Java 7 및 Java 8에서 파일을 읽습니다.

이 기사는 Baeldung에 대한 “Java – Back to Basic”시리즈의 일부입니다.

추가 정보 :

Java – 파일 생성

NIO 또는 Commons IO와 함께 JDK 6, JDK 7을 사용하여 Java에서 파일을 생성하는 방법
자세히보기 →

Java – 파일에 쓰기

Java를 사용하여 파일에 데이터를 쓰는 다양한 방법
자세히보기 →

설정

2.1 입력 파일

이 기사 전체의 대부분의 예제에서 우리는 파일 이름이 fileTest.txt이고 한 줄이 포함 된 텍스트 파일을 읽습니다.

몇 가지 예를 들어, 다른 파일을 사용합니다. 이 경우 파일과 그 내용을 명시 적으로 언급합니다.

2.2 Helper Method

우리는 core와 함께 일련의 테스트 예제를 사용합니다. Java 클래스에만 해당되며 테스트에서는 Hamcrest 매처와 함께 어설 션을 사용합니다.

테스트는 결과의보다 쉬운 어설 션을 위해 InputStream을 String으로 변환하는 공통 readFromInputStream 메소드를 공유합니다.

동일한 결과를 얻을 수있는 다른 방법이 있습니다. 몇 가지 대안에 대해서는이 도움말을 참조하세요.

클래스 경로에서 파일 읽기

3.1 . 표준 Java 사용

이 섹션에서는 클래스 경로에서 사용할 수있는 파일을 읽는 방법을 설명합니다. src / main / resources에서 사용할 수있는 “fileTest.txt”를 읽겠습니다. :

위 코드 스 니펫에서는 현재 클래스를 사용하여 getResourceAsStream 메소드를 사용하여 파일을로드하고로드 할 파일의 절대 경로를 전달했습니다.

같은 메소드를 사용할 수 있습니다. ClassLoader 인스턴스도 :

우리는 classLoa를 얻습니다. getClass (). getClassLoader ()를 사용하여 현재 클래스의 der.

주된 차이점은 ClassLoader 인스턴스에서 getResourceAsStream을 사용할 때 경로가 클래스 경로의 루트에서 시작되는 절대 경로로 처리된다는 것입니다.

클래스 인스턴스에 대해 사용되는 경우 경로는 패키지에 상대적이거나 선행 슬래시로 암시되는 절대 경로 일 수 있습니다.

물론 실제로는 유의하십시오. , 오픈 스트림은 항상 닫혀 있어야합니다 (예 : 예제의 InputStream :

3.2. commons-io 라이브러리 사용

또 다른 일반적인 옵션은 commons-io 패키지의 FileUtils 클래스를 사용하는 것입니다.

여기서 File 객체를 FileUtils 클래스의 readFileToString () 메소드. 이 유틸리티 클래스는 InputStream 인스턴스를 만들고 데이터를 읽기 위해 상용구 코드를 작성할 필요없이 콘텐츠를로드합니다.

동일한 라이브러리는 IOUtils 클래스도 제공합니다.

여기 IOUtils 클래스의 toString () 메서드에 FileInputStream 객체를 전달합니다. 이 유틸리티 클래스는 InputStream 인스턴스를 생성하고 데이터를 읽기 위해 이전 클래스와 동일한 방식으로 작동합니다.

BufferedReader로 읽기

파일 내용을 분석하는 다양한 방법에 초점을 맞 춥니 다.

BufferedReader를 사용하여 파일에서 읽는 간단한 방법으로 시작합니다.

readLine ()은 다음을 반환합니다. 파일의 끝에 도달하면 null입니다.

Java NIO를 사용하여 파일 읽기

JDK7에서 NIO 패키지가 크게 업데이트되었습니다.

p>

Files 클래스와 readAllLines 메서드를 사용하는 예를 살펴 보겠습니다. readAllLines 메소드는 Path를 허용합니다.

경로 클래스는 몇 가지 추가 작업이있는 java.io.File의 업그레이드로 간주 될 수 있습니다.

5.1. 작은 파일 읽기

다음 코드는 새 Files 클래스를 사용하여 작은 파일을 읽는 방법을 보여줍니다.

readAllBytes ()를 사용할 수 있습니다. 이진 데이터가 필요한 경우 방법도 있습니다.

5.2. 대용량 파일 읽기

File 클래스로 대용량 파일을 읽으려면 BufferedReader를 사용할 수 있습니다.

다음 코드는 다음을 사용하여 파일을 읽습니다. 새로운 파일 클래스와 BufferedReader :

5.3. Files.lines ()를 사용하여 파일 읽기

JDK8은 Files 클래스 내부에 lines () 메서드를 제공합니다. Stream of String 요소를 반환합니다.

데이터를 바이트로 읽고 UTF-8 문자셋을 사용하여 디코딩하는 방법의 예를 살펴 보겠습니다.

다음 코드는 다음을 사용하여 파일을 읽습니다. the new Files.lines () :

파일 작업과 같은 IO 채널과 함께 Stream을 사용하려면 close () 메서드를 사용하여 명시 적으로 스트림을 닫아야합니다.

보시다시피 Files API는 파일 내용을 문자열로 읽는 또 다른 쉬운 방법을 제공합니다.

다음 섹션에서는 덜 일반적인 다른 방법을 살펴 보겠습니다. 상황에 따라 적절할 수있는 파일 읽기

스캐너로 읽기

다음으로 스캐너를 사용하여 파일에서 읽습니다. 여기서는 공백을 구분자로 사용합니다.

기본 구분자는 공백이지만 Scanner에서 여러 구분자를 사용할 수 있습니다.

Scanner 클래스는 읽을 때 유용합니다. 콘솔의 콘텐츠 또는 콘텐츠에 알려진 구분 기호 (예 : 공백으로 구분 된 정수 목록)와 함께 기본 값이 포함 된 경우

StreamTokenizer로 읽기

이제 StreamTokenizer를 사용하여 텍스트 파일을 토큰으로 읽어 보겠습니다.

Tokenizer는 먼저 다음 토큰, 문자열 또는 숫자가 무엇인지 파악하여 작동합니다. tokenizer.ttype 필드를 보면됩니다.

그런 다음이 유형을 기반으로 실제 토큰을 읽습니다.

  • tokenizer.nval – 유형이 숫자
  • tokenizer.sval – 유형이 문자열 인 경우

이 예에서는 다음을 포함하는 다른 입력 파일을 사용합니다.

다음 코드는 파일에서 문자열과 숫자를 모두 읽습니다.

파일 토큰의 끝이 마지막에 사용되는 방식에 유의하십시오.

이 접근법은 입력 스트림을 토큰으로 파싱하는 데 유용합니다.

DataInputStream으로 읽기

DataInputStream을 사용하여 바이너리를 읽거나 파일의 원시 데이터 유형

다음 테스트는 DataInputStream을 사용하여 파일을 읽습니다.

FileChannel로 읽기

큰 파일을 읽는 경우 FileChannel은 표준 IO보다 빠를 수 있습니다.

다음 코드는 FileChannel 및 RandomAccessFile을 사용하여 파일에서 데이터 바이트를 읽습니다.

UTF-8 Encod 읽기 ed 파일

이제 BufferedReader를 사용하여 UTF-8 인코딩 파일을 읽는 방법을 살펴 보겠습니다. 이 예에서는 중국어 문자가 포함 된 파일을 읽습니다.

URL에서 콘텐츠 읽기

URL에서 콘텐츠를 읽으려면 다음을 사용합니다. 예에서 “/”URL :

URL에 연결하는 다른 방법도 있습니다. 여기에서는 표준 SDK에서 사용 가능한 URL 및 URLConnection 클래스를 사용했습니다.

JAR에서 파일 읽기

JAR 파일, 우리는 그 안에 파일이있는 JAR이 필요합니다. 이 예에서는 “hamcrest-library-1.3.jar”파일에서 “LICENSE.txt”를 읽습니다.

여기서는 Hamcrest 라이브러리에있는 LICENSE.txt를로드하려고합니다. 리소스를 얻는 데 도움이되는 Matcher의 클래스입니다. 클래스 로더를 사용하여 동일한 파일을로드 할 수도 있습니다.

결론

보시다시피, 일반 자바를 사용하여 파일을로드하고 데이터를 읽을 수있는 가능성이 많습니다.

클래스 경로, URL 또는 jar 파일과 같은 다양한 위치에서 파일을로드 할 수 있습니다.

그런 다음 우리는 BufferedReader를 사용하여 한 줄씩 읽을 수 있고 스캐너는 다른 구분 기호를 사용하여 읽습니다. StreamTokenizer는 파일을 토큰으로 읽습니다. DataInputStream은 이진 데이터와 기본 데이터 유형을 읽습니다. SequenceInput Stream을 사용하여 여러 파일을 하나의 스트림으로 연결하고 FileChannel을 사용하여 큰 파일을 빠르게 읽을 수 있습니다. 파일 등

Write a Comment

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다