初识IO流

File类 只对文件或目录的属性进行操作

File类 不能访问文件的内容,不能从文件中读取数据或向文件里写数据。

构造方法
File file = new File("文件路径和名称");

createNewFile() //在磁盘上去创建文件

getName()
getAbsolutePath()
getPath()

Exits()
isFile()
isDirectory()


读文件中数据: 把文件中的数据读到内存中

写文件: 把内存中的数据写到文件中

通过流 读写文件

流: 一连串流动的字符,程序中流进流出的一个字节序列。

输出流 将信息送往程序的外部

通过流对象 将内存中的数据 以流的方式写入文件,
也可以将文件中的数据以流的方式读取到内存。


流对象在构造的时候,经常和数据源联系起来。

数据源分为: 源 数据源

目标 数据源

输入流 : 联系的是源数据源 , 从源数据源(文件) 把数据读入 程序
只能从中读取数据,不能写入

输入流以InputStream 和Reader 作为基类

输出流: 联系的是目标数据源, 从程序把数据写入 目标数据源(文件)
只能向其写入数据,不能从中读取数据

输出流 以OutputStream 和Writer 作为基类


输入和输出是从程序运行所在的内存角度来划分的。


按照操作的数据单元不同,分为字节流和字符流

字节流 最小数据单元是 8位的字节 ,建议用于二进制数据

字符流 最小数据单元是 16位的字符,用于文本

四个基类都是抽象类,不能创建对象, 只能用作 更具体实现输入输出功能子类的父类(基类)

一、 字节流 InputStream

1.1 使用字节流读取文本文件

API中的方法:
int read();
int read(byte[] b);
int read(byte[] b,int off,int len);
void close();
void available();

字节输入流父类:InputStream

字节输入流子类: FileInputStream

使用FileInputStream读取文本文件的步骤:

1) 创建文件输入流对象 new

2) 利用文件输入流的方法读取文本文件的数据 read()

3) 关闭文件输入流对象

1.2 使用字节流 写文本文件

1.2.1 字节输出流父类 OutputStream
void write();
void write(byte[] b);
void write(byte[] b, int off, int len);
void close();

1.2.2 字节输出流子类 FileOutputStream

3种构造方法:

FileOutputStream( new File("文件路径名称")); File file = new File("文件路径名称");

FileOutputStream("d:/mydoc/hello.txt"); //新写入的内容覆盖原来的内容

FileOutputStream("文件路径名称",true); //写入的内容不覆盖原有内容

使用字节输出流的步骤:

1) 构造文件输出流对象
2) 利用文件输出流的方法把数据写入文本文件 write();
3) 关闭文件输出流close()


二、字符流 Reader 和Writer

2.1 字符输入流父类 Reader

read();
read(byte[] c);
read(char[] c, int off, int len);

void close();

2.2 字符输入流 子类 FileReader

使用步骤:

1)创建对象 : Reader fr = new FileReader("文件路径名称");

2)利用类的方法读取文本文件 : fr.read();//读取单个字符

fr.read( 字符数组名); 把读取的内保存到数组中

3)关闭相关流对象 : fr.close();

2.3 字符输入流 BufferedReader

1)创建FileReader对象 : Reader fr = new FileReader("文件路径名称");

2)创建BufferedReader 对象: BufferedReader br = new BufferedReader(fr);

3)利用BufferedReader 类的方法读取文本文件的数据: br.readLine();

2.4 字符输出流父类: Writer

write(String str);
write(String str,int off,int len);
void close();
void flush(); //刷新输出流

2.5 字符输出流子类: FileWriter

Writer fw = new FileWriter("文件路径名称");

fw.write("hello");

fw.close();

2.6 字符输出流子类: 字符输出缓冲流 BufferedWriter

Writer fw = new FileWriter("文件路径名称");

BufferedWriter bw = new BufferedWriter(fw);

bw.write("hello");
fw.close();
bw.close();


三、 二进制文件的读写

InputStream 抽象类,父类,基类
FileInputStream 子类
DataInputStream 子类的子类

3.1 使用字节流类 Data InputStream 读二进制文件

DataInputStream 类是FileInputStream的子类,是FileInputStream类的扩展。

使用步骤:
1)创建流对象
FileInputStream fis = new FileInputStream("文件路径名");
DataInputStream dis = new DataInputStream(fis);

2)利用数据流的方法读取二进制文件
dis.read();

3)关闭流对象
dis.close();

3.2 使用字节流类DataOutputStream 写二进制文件

1)创建对象
FileOutputStream fos = new FileOutputStream("文件路径名");
DataOutputStream dos = new DataOutputStream(fos);
2)利用方法写二进制文件
dos.write(1);

3)关闭数据流
dos.close();

四、对象 序列化和反序列化对象流

4.1 把一个对象信息写入文件:

//创建对象
FileOutputStream fos = new FileOutputStream("d:/mydoc/student.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);

//创建学生对象
Student stu = new Student("安娜",30,"女");

//把对象信息写入txt文件
oos.writeObject(stu);


4.2 从txt文件中读取一个对象的信息到控制台:

FileInputStream fis = new FileInputStream("d:/mydoc/student.txt");
ObjectInputStream ois = new ObjectInputStream(fis);

Student stu2 = (Student)ois.readObject();

System.out.println(stu2.getAge());
System.out.println(stu2.getName());
System.out.println(stu2.getSex());

4.3 关闭流对象
ois.close();
fis.close();
oos.close();
fos.close();

原文地址:https://www.cnblogs.com/sunnylife2004/p/8883340.html