以下の文を日本語で自然に言い換えてください。1つのオプションで構いません。「Javaでファイルを文字列として読み込む」
ファイルを扱っている時には、JavaでファイルをStringに読み込む必要があることがあります。今日は、JavaでファイルをStringに読み込むさまざまな方法を見ていきます。
「Javaでファイルを文字列に読み込む」
JavaでファイルをStringに読み込む方法はたくさんあります。このチュートリアルでは、以下の方法を詳しく探っていきます。
-
- 以下は、日本語での表現方法です(ひとつのオプション):
BufferedReaderを使用して、Javaでファイルを文字列に読み込む
FileInputStreamを使用して、Javaでファイルを文字列に読み込む
Filesクラスを使用して、Javaでファイルを文字列に読み込む
Scannerクラスを使用して、ファイルを文字列に読み込む
Apache Commons IO FileUtilsクラスを使用して、Javaでファイルを文字列に読み込む
BufferedReaderを使用してJavaでファイルを文字列として読み込む方法
BufferedReaderのreadLineメソッドを使って、ファイルを行ごとに読み込むことができます。やるべきことは、これらを改行文字とともにStringBuilderオブジェクトに追加するだけです。下記は、BufferedReaderを使用してファイルを文字列として読み込むためのコードスニペットです。
BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
// delete the last new line separator
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();
String content = stringBuilder.toString();
BufferedReaderとchar配列を使用してファイルをStringに効率的に読み込むもう一つの方法があります。
BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
while (reader.read(buffer) != -1) {
stringBuilder.append(new String(buffer));
buffer = new char[10];
}
reader.close();
String content = stringBuilder.toString();
JavaのFileInputStreamを使用して、ファイルをStringに読み込む。
ファイルを文字列に読み込むためには、FileInputStreamとバイト配列を使用できます。画像やビデオなどの文字ではないファイルを読み込む場合には、この方法を使用すべきです。
FileInputStream fis = new FileInputStream(fileName);
byte[] buffer = new byte[10];
StringBuilder sb = new StringBuilder();
while (fis.read(buffer) != -1) {
sb.append(new String(buffer));
buffer = new byte[10];
}
fis.close();
String content = sb.toString();
Filesクラスを使用して、Javaでファイルを文字列に読み込む
1つのコード行で、ファイルの内容をすべて文字列として読み取るためには、Filesユーティリティクラスを使用できます。
String content = new String(Files.readAllBytes(Paths.get(fileName)));
Scannerクラスを使用して、ファイルをStringに読み込む
Scannerクラスは、Javaでテキストファイルを文字列として素早く読み込む方法です。
Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();
アパッチコモンズIOのFileUtilsクラスを使用して、Javaでファイルを文字列に読み込む。
あなたのプロジェクトでApache Commons IOを使用している場合、これはJavaでファイルを簡単かつ迅速に文字列として読み取る方法です。
String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
Javaでファイルを文字列に読み込む例
以下は、適切な例外処理とファイルを文字列に読み込む様々な方法をすべて表示する最終プログラムです。
package com.scdev.files;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import org.apache.commons.io.FileUtils;
public class JavaReadFileToString {
/**
* This class shows different ways to read complete file contents to String
*
* @param args
* @throws IOException
*/
public static void main(String[] args) {
String fileName = "/Users/scdev/Downloads/myfile.txt";
String contents = readUsingScanner(fileName);
System.out.println("*****Read File to String Using Scanner*****\n" + contents);
contents = readUsingApacheCommonsIO(fileName);
System.out.println("*****Read File to String Using Apache Commons IO FileUtils*****\n" + contents);
contents = readUsingFiles(fileName);
System.out.println("*****Read File to String Using Files Class*****\n" + contents);
contents = readUsingBufferedReader(fileName);
System.out.println("*****Read File to String Using BufferedReader*****\n" + contents);
contents = readUsingBufferedReaderCharArray(fileName);
System.out.println("*****Read File to String Using BufferedReader and char array*****\n" + contents);
contents = readUsingFileInputStream(fileName);
System.out.println("*****Read File to String Using FileInputStream*****\n" + contents);
}
private static String readUsingBufferedReaderCharArray(String fileName) {
BufferedReader reader = null;
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
try {
reader = new BufferedReader(new FileReader(fileName));
while (reader.read(buffer) != -1) {
stringBuilder.append(new String(buffer));
buffer = new char[10];
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuilder.toString();
}
private static String readUsingFileInputStream(String fileName) {
FileInputStream fis = null;
byte[] buffer = new byte[10];
StringBuilder sb = new StringBuilder();
try {
fis = new FileInputStream(fileName);
while (fis.read(buffer) != -1) {
sb.append(new String(buffer));
buffer = new byte[10];
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null)
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
private static String readUsingBufferedReader(String fileName) {
BufferedReader reader = null;
StringBuilder stringBuilder = new StringBuilder();
try {
reader = new BufferedReader(new FileReader(fileName));
String line = null;
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
// delete the last ls
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuilder.toString();
}
private static String readUsingFiles(String fileName) {
try {
return new String(Files.readAllBytes(Paths.get(fileName)));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private static String readUsingApacheCommonsIO(String fileName) {
try {
return FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private static String readUsingScanner(String fileName) {
Scanner scanner = null;
try {
scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
// we can use Delimiter regex as "\\A", "\\Z" or "\\z"
String data = scanner.useDelimiter("\\A").next();
return data;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
if (scanner != null)
scanner.close();
}
}
}
上記の方法のどれでも使って、Javaでファイルの内容を文字列に読み込むことができます。ただし、ファイルサイズが非常に大きい場合はおすすめできません。メモリ不足のエラーが発生する可能性があります。
弊社のGitHubリポジトリから、Java IOのさらなる例をチェックアウトできます。
参考文献:
- BufferedReader API Doc
- Files API Doc