Java文件读写操作:核心流类与方法解析
在Java编程中,文件读写是一项基础而关键的技能。通过文件流(Stream),我们可以高效地进行数据的输入输出操作。本文将深入探讨Java中读写文件的常用流代码案例,并对比分析不同流类的特点与使用场景。
流的基本概念与分类
在Java中,流是抽象的输入输出接口,用于表示数据的输入来源和输出目的地。流可以分为字节流和字符流。字节流以字节为单位处理数据,而字符流则以字符为单位。此外,流还可以根据数据流的方向分为输入流和输出流。
字节流与字符流的对比
特性 | 字节流 | 字符流 |
---|---|---|
单位 | 字节 | 字符 |
编码 | 不考虑字符编码 | 考虑字符编码 |
核心类 | InputStream , OutputStream |
Reader , Writer |
核心类与方法
字节流
FileInputStream
FileInputStream
是字节输入流的一种,用于从文件中读取数据。它继承自InputStream
,提供了多种读取数据的方法。
int read()
:读取单个字节。int read(byte[] b)
:读取多个字节到数组b
中。int read(byte[] b, int off, int len)
:从文件中读取最多len
个字节到数组b
的off
偏移量开始的位置。void close()
:关闭流并释放资源。
FileOutputStream
FileOutputStream
是字节输出流的一种,用于将数据写入文件。它继承自OutputStream
,提供了多种写入数据的方法。
void write(int b)
:写入单个字节。void write(byte[] b)
:写入整个字节数组。void write(byte[] b, int off, int len)
:写入字节数组b
的off
到off+len
部分。void flush()
:刷新输出流,确保所有数据都写入文件。void close()
:关闭流并释放资源。
字符流
FileReader
FileReader
是字符输入流的一种,用于从文件中读取字符。它提供了按字符读取的方法。
int read()
:读取一个字符。int read(char[] cbuf, int off, int len)
:读取多个字符到字符数组cbuf
的off
位置开始的地方。long skip(long n)
:跳过并丢弃n
个字符。void close()
:关闭流并释放资源。
FileWriter
FileWriter
是字符输出流的一种,用于将字符写入文件。它提供了按字符写入的方法。
void write(int c)
:写入一个字符。void write(char[] cbuf, int off, int len)
:写入字符数组cbuf
的off
到off+len
部分。void newLine()
:写入一个行分隔符。void flush()
:刷新输出流,确保所有字符都写入文件。void close()
:关闭流并释放资源。
使用场景
字节流适用于处理二进制文件,如图像、音频、视频等,因为这些文件的数据不是基于字符编码的。而字符流则适用于处理文本文件,因为它能够处理字符编码,确保文本内容的正确性。
代码案例
案例1:使用FileInputStream
和FileOutputStream
读写二进制文件
// 读取图片文件并写入到新的文件中
public void copyBinaryFile(String sourcePath, String targetPath) {
try (FileInputStream fis = new FileInputStream(sourcePath);
FileOutputStream fos = new FileOutputStream(targetPath)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
案例2:使用FileReader
和FileWriter
读写文本文件
// 读取文本文件并写入到新的文件中
public void copyTextFile(String sourcePath, String targetPath) {
try (FileReader fr = new FileReader(sourcePath);
FileWriter fw = new FileWriter(targetPath)) {
char[] buffer = new char[1024];
int len;
while ((len = fr.read(buffer)) != -1) {
fw.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
通过上述案例,我们可以看到字节流和字符流在文件读写操作中的应用。字节流直接处理原始字节,适合于非文本文件的读写;而字符流则处理字符,适合于文本文件的读写。在实际开发中,根据不同的文件类型和需求,选择合适的流类进行操作是至关重要的。
上一篇:Java文件读写操作详解