程序为了获得外部数据,可以在数据源(文件、内存、网络套接字)上创建一个输入流,用read()方法读取数据。也可以在数据源上创建一个输出流,用write()方法将数据写到输出流中。
按照处理数据的类型分,数据流可以分为:二进制流和文本流。
二进制流:也称字节流,处理信息的基本单位是字节。
文本流:也称字符流,处理信息的基本单位是字符。
主要用来表示物理磁盘上的实际文件或目录。
文件字节输入流 ——用来读文件。
(1)创建文件字节输入流
FileInputStream类创建的对象称为文件字节输入流。
(2)读文件
int read() //读一个字节 到文件末尾,返回-1
int read(byte b[]) //读b.length个字节 文件为空,返回-1
int read(byte b[],int off,int len) //读len个字节,存放到数组b中的第off个位置
文件字节输出流 —— 用来写文件
(1)创建文件字节输出流
FileOutputStream类创建的对象称为文件字节输出流。
如果FileOutputStream流要写的文件不存在,该流会首先创建文件再写入。
(2)写文件
write(byte b[]) //写b.length个字节到文件
(1)文件字节输入流
(2)文件字节输出流
文件字符输出流 ——写数据
(1)创建输出流
File f=new File("./src/d12/test.txt");
FileWriter out=new FileWriter(f);
(2)写文件
write(int n) //写一个字符
文件字符输入流 ——读数据
(1)创建输入流
File f=new File("./src/d12/test.txt");
FileReader in=new FileReader(f);
(2)读文件
int read(); //读一个字符
实际应用中,经常需要读取一行数据,FileReader很难完成。
(1)缓冲输入流 BufferedReader ,它的源是FileReader 按行读文件
File file=new File("student.txt");
FileReader in=new FileReader(file);
BufferedReader bufferin=new BufferedReader(in);
(2)读一行
readLine()
(3)缓冲输出流 BufferedWriter 与FileWriter连接在一起
FileWriter out=new FileWriter("student.txt");
BufferedWriter bufferout=new BufferedWriter(out);
(4)写
write(String)
(1)文件字符输出、输入流:
(2)缓冲流
RandomAccessFile 既可以读也可以写
(1)构造方法:
RandomAccessFile(String name,String mode)
RandomAccessFile(File file,String mode)
参数mode取r(只读)或rw(可读写)
(2)读、写
方法:seek(long a),可以定位RandomAccessFile流的读写位置,其中参数a确定读写位置距离文件开头的字节个数。
方法:getFilePointer(),可以获取流的当前读写位置。
DataInputStream、DataOutputStream类创建的对象称为数据输入流、数据输出流。它们允许程序按照与机器无关的风格读取Java原始数据。
DataInputStream通常以FileInputStream作为底层流。
DataOutputStream通常以FileOutputStream作为底层流。
ObjectInputStream、ObjectOutputStream类创建的对象称为对象输入流、对象输出流。
ObjectInputStream以InputStream子类作为底层流,如FileInputStream
ObjectOutputStream以OutputStream子类作为底层流,如FileOutputStream。
主要方法:
writeObject(Object obj)方法 将一个对象obj写入到一个文件。
readObject()方法,读取一个对象。
使用对象流读/写对象时,要保证对象是序列化的。
class Student implements Serializable{ //标记接口,没有方法
}
某对象的“复制品”,该复制品的变化不会引起原对象的变化,这样的复制品就称为原对象的克隆。
使用对象流很容易获取一个对象的克隆,只需将该对象写入再读回就是原对象的克隆。
(1)随机流
(2)数据流
(3)对象流