一、背景介绍
Java的流式输入输出建立在4个抽象类的基础上:InputStream,OutputStream,Reader和Writer。它们用来创建具体的流式子类。InputStream和OutputStream类被设计为字节类,而Reader和Writer被设计为字符流类。本文只是讲字节流类。
字节流中的两个顶层类为:InputStream(输入字节流)和OutputStream(输出字节流). 其下有两个子类FileInputStream(文件输入流)和FileOutputStream(文件输出流)。我们看一下在java中的结构:

二、函数方法介绍
我们用 FileInputStream来读一个文件,用FileOutputStream来写入文件。
1.FileInputStream 方法 :
FileInputStream(File file) // 构造函数1:创建“File对象”对应的“文件输入流”
FileInputStream(FileDescriptor fd) // 构造函数2:创建“文件描述符”对应的“文件输入流”
FileInputStream(String path) // 构造函数3:创建“文件(路径为path)”对应的“文件输入流”
int available() // 返回“剩余的可读取的字节数”或者“skip的字节数”
void close() // 关闭“文件输入流”
FileChannel getChannel() // 返回“FileChannel”
final FileDescriptor getFD() // 返回“文件描述符”
int read() // 返回“文件输入流”的下一个字节
int read(byte[] buffer, int byteOffset, int byteCount) // 读取“文件输入流”的数据并存在到buffer,从byteOffset开始存储,存储长度是byteCount。
long skip(long byteCount) // 跳过byteCount个字节
2.FileOutputStream 方法
FileOutputStream(File file) // 构造函数1:创建“File对象”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。
FileOutputStream(File file, boolean append) // 构造函数2:创建“File对象”对应的“文件输入流”;指定“追加模式”。
FileOutputStream(FileDescriptor fd) // 构造函数3:创建“文件描述符”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。
FileOutputStream(String path) // 构造函数4:创建“文件(路径为path)”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。
FileOutputStream(String path, boolean append) // 构造函数5:创建“文件(路径为path)”对应的“文件输入流”;指定“追加模式”。
void close() // 关闭“输出流”
FileChannel getChannel() // 返回“FileChannel”
final FileDescriptor getFD() // 返回“文件描述符”
void write(byte[] buffer, int byteOffset, int byteCount) // 将buffer写入到“文件输出流”中,从buffer的byteOffset开始写,写入长度是byteCount。
void write(int oneByte) // 写入字节oneByte到“文件输出流”中
三、文件读取实例讲解
FileInputStream读取的两种方法:逐字节读;以字节数组读取两种方式。
public static void main(String[] args) {
//封装成File对象,确保操作前文件一定存在
File file=new File("E:\\a.text");
try {
//创建文件输入流对象.指定要读取的文件对象
FileInputStream fin=new FileInputStream(file);
//两种读取方法
//1)创建字节数组,准备将文件流中的数据传给字节数组
byte[] b=new byte[fin.available()];
//将字节流中的数据传递给字节数组
fin.read(b);
//打印字节数组
//2)循环
while ((fin.read())!=-1) {
System.out.println((char)fin.read());
}
fin.close();
//处理异常
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
如何用stream的方式输出文件?
public class FileStreamTest {
16
17 private static final String FileName = "file.txt";
18
19 public static void main(String[] args) {
20 testWrite();
21
22 }
24
39 private static void testWrite() {
40 try {
41 // 创建文件“file.txt”对应File对象
42 File file = new File(FileName);
43 // 创建文件“file.txt”对应的FileOutputStream对象,默认是关闭“追加模式”
44 FileOutputStream fileOut1 = new FileOutputStream(file);
45 // 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利
46 PrintStream out1 = new PrintStream(fileOut1);
47 // 向“文件中”写入26个字母
48 out1.print("abcdefghijklmnopqrstuvwxyz");
49 out1.close();
50
51 // 创建文件“file.txt”对应的FileOutputStream对象,打开“追加模式”
52 FileOutputStream fileOut2 = new FileOutputStream(file, true);
53 // 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利
54 PrintStream out2 = new PrintStream(fileOut2);
55 // 向“文件中”写入"0123456789"+换行符
56 out2.println("0123456789");
57 out2.close();
58
59 } catch(IOException e) {
60 e.printStackTrace();
61 }
62 }
这篇博客介绍了Java中字节流的基础,重点关注InputStream和OutputStream的使用,特别是FileInputStream和FileOutputStream。文章通过详细讲解函数方法和实例,阐述了如何进行文件的读取和写入操作。

1537

被折叠的 条评论
为什么被折叠?



