Java读取文件并转换为字符串的完整教程 | 高效处理文件内容的方法
Java读取文件并转换为字符串的多种方法
在Java开发过程中,经常需要将文件内容读取为字符串。本文将详细介绍多种实现文件读取并转换为字符串的方法,帮助开发者根据不同场景选择最适合的方案。
Java中读取文件并转换为字符串的方法
在Java中,有多种方式可以将文件读取为字符串。本教程将探讨以下几种常用方法:
- 使用BufferedReader将文件读取为字符串
- 使用FileInputStream将文件读取为字符串
- 使用Files类将文件读取为字符串
- 使用Scanner类将文件读取为字符串
- 使用Apache Commons IO FileUtils类将文件读取为字符串

使用BufferedReader读取文件并转换为字符串
我们可以使用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);
}
// 删除最后一个换行符
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();
String content = stringBuilder.toString();
除了逐行读取,BufferedReader还可以结合字符数组使用,这是另一种高效的文件读取方法:
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();
使用FileInputStream将文件读取为字符串
我们可以使用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 7引入的Files工具类提供了一种非常简洁的方式,可以在一行代码中将整个文件内容读取为字符串:
String content = new String(Files.readAllBytes(Paths.get(fileName)));
使用Scanner类将文件读取为字符串
Scanner类提供了一种在Java中快速读取文本文件并转换为字符串的方法:
Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();
使用Apache Commons IO FileUtils类将文件读取为字符串
如果您的项目中已经使用了Apache Commons IO库,那么FileUtils类提供了一种非常简单快捷的方法来将文件读取为字符串:
String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
Java读取文件并转换为字符串的完整示例
下面是一个完整的程序示例,包含了适当的异常处理,并展示了将文件读取为字符串的各种方法:
package com.Olivia.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 {
/**
* 本类展示了将文件内容读取为字符串的不同方法
*
* @param args
* @throws IOException
*/
public static void main(String[] args) {
String fileName = "/Users/scdev/Downloads/myfile.txt";
String contents = readUsingScanner(fileName);
System.out.println("*****使用Scanner读取文件为字符串*****\n" + contents);
contents = readUsingApacheCommonsIO(fileName);
System.out.println("*****使用Apache Commons IO FileUtils读取文件为字符串*****\n" + contents);
contents = readUsingFiles(fileName);
System.out.println("*****使用Files类读取文件为字符串*****\n" + contents);
contents = readUsingBufferedReader(fileName);
System.out.println("*****使用BufferedReader读取文件为字符串*****\n" + contents);
contents = readUsingBufferedReaderCharArray(fileName);
System.out.println("*****使用BufferedReader和字符数组读取文件为字符串*****\n" + contents);
contents = readUsingFileInputStream(fileName);
System.out.println("*****使用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);
}
// 删除最后一个换行符
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());
// 我们可以使用"\\A"、"\\Z"或"\\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操作示例。