JDK7은 파일이 숨겨진 파일인지 확인하거나 파일이 읽기 전용 파일인지 확인하는 등 파일을 조작하는 많은 유용한 방법이 포함 된 새 파일 작동 클래스 java.nio.file.file을 소개합니다. 개발자는 파일을 사용하여 전체 파일을 메모리로 읽으면 바이트 배열을 리턴하고 문자열 생성자에게 문자열 출력을 만들 수 있습니다. 이 메소드는 파일의 모든 바이트 내용을 읽을 때 파일 속성이 닫히고, 그렇지 않으면 IO 예외 또는 기타 확인되지 않은 예외가 발생하도록합니다. 즉, 파일을 마지막 블록 내용으로 읽은 후 파일을 닫을 필요가 없습니다.
이 방법은 메모리 공간이 부족할 수 있으므로 큰 파일을 읽는 데 적합하지 않습니다. 개발자는 예외 또는 구문 분석 오류를 피하기 위해 파일의 문자 인코딩을 지정해야합니다.
파일을 문자열로 읽으려면 이전 메소드와 유사한 readalllines (Path Path, Charset CS) 메소드를 사용할 수도 있으며 파일을 읽은 후 파일을 닫을 필요가 없습니다. 그러나 바이트 배열이 아니라 다양한 문자열이 반환됩니다. 또한 Java8은 문자열 변환을 위해 UTF-8 인코딩을 직접 사용하여 문자 세트를 지정하지 않고이 메소드를 무시합니다.
파일을 한 줄씩 문자열로 읽으려면 파일에서 문자열 스트림을 반환하고 utf-8 인코딩을 사용하여 바이트를 문자로 변환하는 files.lines () 메소드를 사용할 수 있습니다. foreach () 메소드를 사용하여 아래의 세 번째 코드 스 니펫과 같은 파일의 모든 내용을 콘솔에 출력하기 위해 하나의 Java 코드를 사용하여 아래의 세 번째 코드 스 니펫을 사용할 수 있습니다.
코드 사본은 다음과 같습니다.
import java.io.ioexception;
java.nio.charset.standardcharsets 가져 오기;
import java.nio.file.files;
java.nio.file.paths import;
Java.util.list 가져 오기;
공개 클래스 FilereadingTest {
public static void main (String [] args)은 ioexception {
// Java 7 예제
// files.readAllBytes 파일 인코딩에서 파일 인코딩이 UTF-8이 아닌 경우 중국 내용에는 혼란스러운 문자가 있습니다.
System.out.println (새 String (files.readallBytes (paths.get ( "d : //jd.txt")));
// Java의 8 가지 예
list <string> lines = files.readalllines (paths.get ( "d : //jd.txt"), Standardcharsets.utf_8);
StringBuilder sb = new StringBuilder ();
for (문자열 선 : line) {
sb.append (line);
}
fromfile = sb.tostring ();
System.out.println (Fromfile);
}
}
JDK7을 사용하지 않지만 JDK8을 사용하지 않으면 한 줄의 코드가 파일 읽기를 완료 할 수 있습니다.
코드 사본은 다음과 같습니다.
static java.lang.system.out 가져 오기;
static java.nio.file.files.ReadAllBytes 가져 오기;
static java.nio.file.paths.get 가져 오기;
import java.io.ioexception;
공개 클래스 파일 인토 스트링 {
public static void main (String [] args)은 ioexception {
// 한 줄의 코드를 사용하여 파일을 읽을 수 있고 기본값은 UTF-8 인코딩입니다.
out.println (new String (readAllBytes (get ( "d : /jd.txt")));
}
}
JDK8을 사용하는 경우 스트리밍 API를 사용하여 코드가 더 간결하고 효율적이되도록 파일을 읽고 쓸 수도 있습니다.
다음 예에서는 lines () 메소드가 문자열 스트림을 반환하고 문자열은 UTF-8 인코딩을 사용합니다. 다음과 같이 :
코드 사본은 다음과 같습니다.
import java.io.ioexception;
java.nio.charset.standardcharsets 가져 오기;
import java.nio.file.files;
java.nio.file.paths import;
공개 클래스 java8filereader {
public static void main (String [] args)은 ioexception {
// Java 8은 스트리밍을 사용하여 파일을 읽습니다.
files.lines (paths.get ( "d : //jd.txt"), Standardcharsets.utf_8) .foreach (System.out :: println);
}
}
위의 예에서 주목할만한 몇 가지 사항 :
1) 파일이 클 수 있으며 메모리 공간을 초과 할 수 있습니다.
2) 로그를 출력하려면 파일을 읽을 수없는 이유 또는 파일을 읽는 동안 오류가 발생하는 이유를 기록하십시오.
3) 바이트를 문자로 변환 할 때 문자 인코딩을 지정해야합니다.
4) 파일이 존재하지 않는 상황을 처리합니다.
또한 읽기 파일의 코드가 ANSI 인코딩 인 경우 위의 예는 파일 내용을 읽을 때 java.nio.charset.malformedInputexception : input length = 1 오류를보고합니다.