JDK7は、新しいファイル操作クラスjava.nio.file.fileを導入します。これには、ファイルが非表示のファイルであるかどうか、ファイルが読み取り専用ファイルであるかどうかを確認するなど、ファイルを操作するための多くの便利な方法が含まれています。開発者は、Files.ReadallBytes(PATH)メソッドを使用して、ファイル全体をメモリに読み取ります。この方法により、ファイルのすべてのバイトコンテンツが読み取られると、ファイル属性が閉じられます。そうしないと、IO例外またはその他のチェックされていない例外が発生します。これは、最後のブロックコンテンツにファイルを読み取った後、ファイルを閉じる必要がないことを意味します。
この方法は、メモリスペースが不十分な場合があるため、大きなファイルの読み取りには適していないことに注意してください。また、開発者は、例外や解析エラーを回避するために、ファイルの文字エンコードを指定する必要があります。
ファイルを文字列として読みたい場合は、以前のメソッドに似たreadalllines(Path Path、Charset CS)メソッドを使用することもできます。ファイルを読んだ後にファイルを閉じる必要はありません。しかし、それはバイト配列ではなく、文字列の配列を返します。さらに、Java8は、文字列セットを指定せずに、文字列変換のためにUTF-8エンコードを直接使用して、この方法を上書きします。
ファイルを線ごとに読み取りたい場合は、files.lines()メソッドを使用して、読み取りファイルから文字列ストリームを返し、UTF-8エンコーディングを使用してバイトを文字に変換します。 foreach()メソッドを使用して、Javaコードの1行のみを使用して、下の3番目のコードスニペットなど、ファイルのすべてのコンテンツをコンソールに出力できます。
コードコピーは次のとおりです。
java.io.ioexceptionをインポートします。
java.nio.charset.standardcharsetsをインポートします。
java.nio.file.filesをインポートします。
java.nio.file.pathsをインポートします。
java.util.listをインポートします。
パブリッククラスのfileReadingtest {
public static void main(string [] args)throws ioexception {
// Java 7の例
// Files.ReadallBytesは、デフォルトでUTF-8エンコードのファイルを読み取ります。
system.out.println(new String(files.readallbytes(paths.get( "d://jd.txt"))));
// Javaの8つの例
List <String> lines = files.readalllines(paths.get( "d://jd.txt")、stardandcharsets.utf_8);
stringbuilder sb = new StringBuilder();
for(string line:lines){
sb.append(line);
}
string fromfile = sb.toString();
system.out.println(fromfile);
}
}
JDK7を使用していないが、JDK8を使用していない場合、1つのコードがファイルの読み取りを完了することができます。
コードコピーは次のとおりです。
static java.lang.system.outをインポートします。
static java.nio.file.files.readallbytesをインポートします。
static java.nio.file.paths.getをインポートします。
java.io.ioexceptionをインポートします。
public class fileintostring {
public static void main(string [] args)throws ioexception {
//コードの1行を使用してファイルを読み取ることができ、デフォルトはUTF-8エンコードです
out.println(new String(readallbytes(get( "d:/jd.txt"))));
}
}
JDK8を使用する場合、ストリーミングAPIを使用してファイルを読み書きすることもできます。これにより、コードがより簡潔で効率的になります。
次の例では、行()メソッドは文字列ストリームを返し、文字列はUTF-8エンコーディングを使用します。次のように:
コードコピーは次のとおりです。
java.io.ioexceptionをインポートします。
java.nio.charset.standardcharsetsをインポートします。
java.nio.file.filesをインポートします。
java.nio.file.pathsをインポートします。
パブリッククラスjava8filereader {
public static void main(string [] args)throws ioexception {
// Java 8はストリーミングを使用してファイルを読み取りますが、これはより効率的です
files.lines(paths.get( "d://jd.txt")、stardentcharsets.utf_8).foreach(system.out :: println);
}
}
上記の例で注意すべきいくつかのポイント:
1)ファイルは大きく、メモリスペースを超える場合があります。
2)ログを出力するには、ファイルを読み取っているときにファイルを読み取れない理由、または遭遇したエラーを記録します。
3)バイトを文字に変換する場合、文字エンコードを指定する必要があります。
4)ファイルが存在しない状況に対処する。
また、読み取りファイルのコードがANSIエンコードの場合、上記の例はjava.nio.charset.malformedinputexception:入力長= 1ファイルコンテンツを読み取るときにエラーを報告することに注意してください。