1、使用Stream I/O读文件
使用 Stream I/O
读文件时,InputStream
及其子类(如 FileInputStream
)提供了字节流读取功能。FileInputStream
从文件中读取字节数据,通过 read()
方法逐字节读取或通过 read(byte[] buffer)
方法一次读取多个字节到缓冲区。读取的数据可以存储在字节数组中,适合处理二进制文件或文本文件的字节流。常见做法是使用 try-with-resources
自动关闭流。
要打开文件进行读取,可以使用 newInputStream(Path, OpenOption...)方法。此方法返回一个无缓冲的输入流,用于从文件中读取字节。
Path file = Paths.get("src/logfile.txt"); ;
try (InputStream in = Files.newInputStream(file);
BufferedReader reader =
new BufferedReader(new InputStreamReader(in))) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException x) {
System.err.println(x);
}
2、使用Stream I/O写文件
使用 Java 的 Stream I/O (OutputStream
类及其子类) 写文件时,通常使用 FileOutputStream
来创建文件输出流,使用 write()
方法将字节数据写入文件。可以通过 FileOutputStream
指定文件路径,如果文件不存在,则会创建新文件;若文件已存在,则会覆盖原有内容。为了提高效率,可以将数据写入字节数组后进行批量写入。常用的流操作也可以通过 BufferedOutputStream
包装以提高性能。
可以使用该newOutputStream(Path, OpenOption...)方法创建文件,附加到文件或写入文件 。此方法打开或创建用于写入字节的文件,并返回未缓冲的输出流。
该方法采用可选OpenOption
参数。如果未指定打开选项,并且文件不存在,则会创建一个新文件。如果文件存在,它将被截断。此选项等效于使用CREATE
和TRUNCATE_EXISTING
选项调用方法。
以下示例打开一个日志文件。如果该文件不存在,则会创建它。如果文件存在,则将其打开以进行追加。
import static java.nio.file.StandardOpenOption.*; import java.nio.file.*; import java.io.*; public class LogFileTest { public static void main(String[] args) { // Convert the string to a // byte array. String s = "Hello World! "; byte data[] = s.getBytes(); Path p = Paths.get("./logfile.txt"); try (OutputStream out = new BufferedOutputStream( Files.newOutputStream(p, CREATE, APPEND))) { out.write(data, 0, data.length); } catch (IOException x) { System.err.println(x); } } }
相关文档:https://docs.oracle.com/javase/tutorial/essential/io/file.html