本文主要介绍Java中读取一些小文件的常用的方法,和使用Buffered I/O(BufferedReader、BufferedWriter)读写文本文件的方法及示例代码。

1、OpenOptions参数

该参数是可选的,当未指定任何参数时,API会告诉您该方法的默认行为是什么。

OpenOptions支持以下枚举:

WRITE:打开文件以进行写访问。
APPEND:将新数据追加到文件末尾。此选项与WRITE或CREATE选项一起使用。
TRUNCATE_EXISTING:将文件截断为零字节。此选项与WRITE选项一起使用。
CREATE_NEW:创建一个新文件,如果该文件已经存在,则引发异常。
CREATE:打开文件(如果存在)或创建新文件(如果不存在)。
DELETE_ON_CLOSE:关闭流时删除文件。此选项对临时文件很有用。
SPARSE:提示新创建的文件将是稀疏的。此高级选项在某些文件系统(例如NTFS)上很受好评,其中带有数据“间隙”的大文件可以以更有效的方式存储,而这些空白不会占用磁盘空间。
SYNC:使文件(内容和元数据)与基础存储设备保持同步。
DSYNC:使文件内容与基础存储设备同步。

2、读取小文件常用方法

1) 从文件读取所有字节或行

如果您的文件很小,并且希望一次性读取其全部内容,则可以使用 readAllBytes(Path)或 readAllLines(Path, Charset)方法。这些方法将为您完成大部分工作,例如打开和关闭流,但不适用于处理大文件。以下代码显示了如何使用该readAllBytes方法:

Path file = ...;
byte[] fileArray;
fileArray = Files.readAllBytes(file);

2) 将所有字节或行写入文件

您可以使用一种写入方法将字节或行写入文件。

以下代码片段显示了如何使用write方法。

Path file = ...;
byte[] buf = ...;
Files.write(file, buf);

2、通过Buffered I/O(BufferedReader、BufferedWriter)读写文本文件

该java.nio.file软件包支持通道I / O,该通道将数据移动到缓冲区中,从而绕过了一些可能会阻塞流I / O的层。

1) 通过使用Buffered I/O读取文件

newBufferedReader(Path, Charset)方法打开一个文件进行读取,并返回一个BufferedReader可用于以有效方式从文件中读取文本的文件。

以下代码段显示了如何使用该newBufferedReader方法从文件读取。该文件以“US-ASCII”编码。

Charset charset = Charset.forName("US-ASCII");
try (BufferedReader reader = Files.newBufferedReader(file, charset)) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}

2) 通过使用Buffered I/O写入文件

您可以使用newBufferedWriter(Path, Charset, OpenOption...)方法使用 写入文件BufferedWriter

以下代码段显示了如何使用此方法创建以“US-ASCII”编码的文件:

Charset charset = Charset.forName("US-ASCII");
String s = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, charset)) {
writer.write(s, 0, s.length());
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}

相关文档https://docs.oracle.com/javase/tutorial/essential/io/file.html