java中流对文件的操作

                    **java中流对文件的操作**

简介:
标准的读写操作,流根据方向分为输入流和输出流,输入流用来读,输出流用来写,流又分为节点流(低级流)和处理流(高级流).
低级流:读写必须建立在低级流上进行,它的数据源明确,负责实际搬运数据的流.
高级流:不能独立存在,必须处理其他流,处理其他流的目的是简化我们的读写操作.

一.低级流
FileOutputStream fos = new FileOutputStream(String,boolean);文件输出流
FileInputStream fps = new FileInputStream(File,boolean);文件输入流
文件流有两种对文件的写操作覆盖写操作(默认操作)和追加写操作,文件输出流提供了构造方法
以上两种方式创建的文件输出流都是覆盖写操作,即:该流会先将该文件(若该文件若存在并已经有数据)数据清空,在开始新的写操作.文件流还支持一个第二个参数为boolean值参数的构造方法,若该值为true,则是追加写操作,即:通过该流写出的数据都是在当前文件末尾被追加的.
文件流和RandomAccessFile的区别:
1:RAF是基于指针进行读写的,所以可以随意的读写任何位置,但 是流不行,流只能向后读写,不能回头.
2:RAF即可以读又可以写,但是流要根据方向用输入流读用输出流写.
3:RAF可以将文件任何位置的数据覆盖,但是流不行,流要么将所有数据覆盖重新写,要么只能在文件末尾追加写.

二.高级流
1.缓冲字节流(提高读写效率)
BufferedInputStream bis= new BufferedInputStream(FileInputStream对象);
BufferedOutputStream bos= new BufferedOutputStream(FileOutputStream对象);
使用缓冲输入流的read()方法读取一个字节时,实际上缓冲流内部有一个字节数组,它会一次性读取若干字节填满字节数组,然后将第一个字节返回,当再次调用read()读取第二个字节时,缓冲流字节将字节数组第二个字节返回,而不是再去读取了,直到字节数组中所有
字节都已经读取完毕后,才会再次读取一组字节回来.所以缓冲流还是通过提高每次读写的数据量减少实际读写次数提高的读写效率.
2缓冲字符流(可以按行读写字符串)
(1)缓冲字符输入流
BufferedReader br = new BufferedReader(FileInputStream对象);
BufferedReader提供的方法:String readLine()
按行读取字符串,该方法会连续读取若干字符,直到读取到换行符为止,然后将换行符之前的所有字符组成一个字符串返回.若返回值为null则表示EOF.
(2)缓冲字符输出流(即可以传入字节流也可以传入字符流.)
PrintWriter pw = new PrintWriter(“pw.txt”,”gbk”);
PrintWriter提供了方便写文件的 构造方法
* PrintWriter(String path) 和PrintWriter(File f)
缓冲字符输出流,可以按行写出字符串,并且具有自动行刷新.
缓冲效果是依靠BufferedWriter实现的,创建PrintWriter时,它会自动在下面创建一个BufferedWriter来完成其缓冲功能
PrintWriter pw= new PrintWriter(osw,true);
当PW构造方法第一个参数为流,那么就可以 传入第二个参数,是一个boolean参数,若该值为true,则当前PW具有自动行刷新.自动行刷新:每当使用println写出一行内容后会自动flush(刷新).
3字符转换流(可以按照指定的字符集读取字符)
InputStreamReader isr = new InputStreamReader(文件流对象,编码格式);
OutputStreamWriter osw = new OutputStreamWriter(文件流对象,”编码格式”);
字符流的读写单位是以字符为单位的,但是底层本质还是读写字节,只不过字符与字节的转换过程由这组流完成.所以字符流都是高级流.
1:可以转换字符集,即:按照指定的字符集读写字符
2:有些字符流需要处理其他字符流,而不能直接处理字节流,这时候就需要使用这对流先将字节流转换为字符流,再让其他字符流处理该流即可.
4.对象流
(1)对象输入流(用于进行对象反序列化)
ObjectInputStream ois= new ObjectInputStream(文件流对象);
实体类 p = (实体类)ois.readObject();
(2)对象输出流(很方便的将给定的对象转换为一组字节后写出.)
ObjectOutputStream oos= new ObjectOutputStream(文件流对象);
void writeObject(Object o)
oos的该方法可以将java中任何对象转换为一组字节后写出,由于这里oos处理的是fos(文件流),所以转换的字节最终通过fos写入到了文件中 .对象在经过OOS时:
对象被转换为了一组字节这个过程称为:对象序列化
这组字节经过FOS时:被写入到了文件中(硬盘上)
这个过程称为:持久化

猜你喜欢

转载自blog.csdn.net/qq_38729043/article/details/77720545