1.文件IO
外存 内存 缓存
打开txt文件的步骤:
1.启动一个应用程序[记事本,word,excel],系统会给这个程序分配内存空间
2.在外存和内存之间建立一个管道
3.将外存中的数据通过管道输送到内存中
4.输送数据的管道叫做数据流对象
PS: 1.字节是可以操作的最小的有意义的单位
2.所有的数据都可以用字节表示
2.字节输入流
InputStream:所有字节输入流的抽象父类
FileInputStream 文件输入流
ByteArrayInputStream 字节数组输入流
ObjectInputStream 对象输入流
FilterInputStream 过滤输入流
BufferedInputStream 缓冲字节输入流
DataInputStream 基本数据类型输入流
FileInputStream 文件字节输入流
构造方法
FileInputStream(File f,String name)
FileInputStream(String parent,String name)
FileInputStream(String name)
常用方法:
int len = available() 获得流中的估计剩余字节数
int t = read(); 读取流中的字节,如果是-1,说明读取到文件末尾
返回值表示读取到的字节数,如果为-1,表示到流的末尾
skip(t); 丢弃到t个字节
int t =read(byte[]) 将流中的数据读入到字节数组中,直到填满整个数组
int t = read(byte[],off,len) 将流中的数据读入到字节数组中,从数组的第off个位置开始填充,读取len个
返回值表示读取到的真实的字节数,如果为-1,表示到流的末尾
3.字节输出流
OutputStream
FileOutputStream 文件输出流
ByteArrayOutputStream 字节数组输出流
ObjectOutputStream 对象输出流
FilterOutputStream 过滤输出流
BufferedOutputStream 缓冲字节输出流
DataOutputStream 基本数据类型输出流
FileOutputStream 文件字节输出流
构造方法
FileOutputStream(String path)
FileOutputStream(File f)
FileOutputStream(String path,boolean append)
FileOutputStream(File f,boolean append)
常用方法:
write(int) 将指定的字节写到输出流
write(byte[]) 将字节数组中的所有字节写到输出流
write(byte[],off,len) 将字节数组中的字节写到输出流,从下标off开始,写len个
flush() 刷新输出流,将流中的字节强制输出
案例:
1.读取文本文件中的数据
2.将内存中的数据写到文件中
3.完成一个文件复制
作业:
1.查询API文档,找出字符串类中 关于字节数组,字符数组,字符串三者的相互转换的操作
2.定义一个方法完成文件的复制
public void copy(String src,String dest){}
3.给定一个文件,将文件中的所有字节+1,重新写到硬盘中,变成一个新的文件【简单的文件加密】
-----------------------------------------
4.字符集编码
ISO8859系列 : 西欧字符集 用来表示半角字符,不能处理中文
A B c d 2 3
ab C D2 3
GBK/GB2312/GB18030 : 简体中文
BIG5 : 繁体中文
UTF-8 : 基于Unicode编码的字符集
ANSI
------------------------------------------------------------
5.缓冲流的使用:
只能对基本的数据流进行包装
BufferedInputStream bis = new BufferedInputStream(inputstream);
BufferedOutputStream bos = new BufferedOutpuStream(outputstream);
基本数据类型的数据流(可以直接操作基本数据类型)
DataInputStream
DataOutputStream
案例:有一个学生对象,将学生对象的数据保存到文件中
------------
作业:
1.查API文档,学习使用Object流
使用对象流来对学生对象进行写和读操作
2.使用ArrayList保存若干个学生对象,将数据保存到文件中,并可以正确的读取出来
-----------------------------------------------------------
6.对象的序列化和反序列化
序列化:对象本身是不能够在流中串行的,将对象转换成可串行的,有序的数据流
反序列化:将串行的有序的流数据转换成对象的形式
7.如何实现序列化和反序列化?
如果某一个类的对象需要序列化或反序列化,就需要让该类实现序列化Serializable接口
序列化接口不做任何操作,仅仅是给该类的对象添加一个可序列化标记
8.文件协议
txt
doc
bmp
rar
---------------------------------------------------
9.其他流
字节数组输入流
ByteArrayInputStream
字节数组输出流
ByteArrayOutputStream
=============================================================
字符输入流
Reader
InputStreamReader 字节输入流到字符输入流的转换流
FileReader 文件字符流
BufferedReader 缓冲字符流
字符输出流
Writer
OutputStreamWriter
FileWriter
BufferedWriter
----------------------------------------------------------
1.使用字符流完成文本文件的复制
2.如果不是文本文件,能否用字符流来复制???
3.完成文件夹的复制[字节流]
4.解压jdk中的src.zip [用字符流]
统计src中有多少个java文件
统计一共有多少行Java代码
统计src文件夹的总大小
5.[扩展]解析BMP格式的图片
==============================================
10.NIO
FileChannel
ByteBuffer
//创建文件字节流
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest, true);
//获得输入和输出管道
FileChannel inChannel = fis.getChannel();
FileChannel outChannel = fos.getChannel();
outChannel.transferFrom(inChannel, 0, f.length());
inChannel.transferTo(0, f.length(), outChannel);
ByteBuffer buffer = ByteBuffer.wrap("中南大".getBytes());
outChannel.write(buffer);
=================================
11.文件路径
绝对路径:从根磁盘开始计算的路径
windows: D:\\aa\\bb\\cc\\dd.txt
Linux: /aa/bb/cc/dd.txt
http://www.qq.com/aa/bb/cc.css
相对路径:
A: D:\\aa\\a.txt
B: D:\\aa\\bb\\cc\\c.txt
A相对于B的路径: ..\\..\\a.txt
B相对于A的路径: bb\\cc\\c.txt
--------------------------------------------------------
扩展:
1.字节流和字符流的区别,以及各自的使用场景
2.InputStream中 read()方法的返回值表示什么意思?
read(byte[] s)方法的参数表示什么意思?返回值表示什么意思?
read(byte[] s,int t,ine len) 三个参数的意思?返回值是什么意思?
3.outputStream中 write(int t)方法的参数表示什么意思? write(byte[] s)方法的参数表示什么意思? write(byte[] s,int t,ine len) 三个 参数的意思?
4.写出常用的字节流和字符流有哪些?各自的继承体系?
5.使用文件管道FileChannel的好处有哪些?
6.使用FileInputStream/FileOutPUtStream实现文件复制
使用FileInputStream/FileOutPUtStream+自定义缓冲区实现文件复制
使用缓冲字节流实现文件复制
使用缓冲字节流+自定义缓冲区实现文件复制
7.使用字符流用第6题的方式复制文件
8.文件夹的复制一定要会写
9.统计文件夹中的各种数据
文件个数,文件夹个数 文件大小 总行数 标志性的数据[XXX的行数,jpg文件个数]
来源:CSDN
作者:正在路上的小白
链接:https://blog.csdn.net/weixin_44364444/article/details/104019602