按方向
输入/输出流
按单位分
字节流 字符流
按功能分
节点流 处理流
FileInputStream 输入流 字节流 节点流
File类
创建文件
createNewFile
mkdir()
mkdirs()
相对路径 相对于指定位置来说的 没有盘符
绝对路径 明确到指定盘符
read() 读取一个字节 并且把指针向下移动一位
read(byte[]) 读取数据的时候 把数据读取到byte数组中
read(byte[],offset,len)
list() 返回结果指定文件下一层级所有的文件和文件夹的名字
list(filenamefilter) 返回结果指定文件下一层级经过过滤以后的所有的文件和文件夹的名字
listfiles() 返回结果指定文件下一层级所有的文件和文件夹的file对象形式
listfiles(filenamefilter)返回结果指定文件下一层级经过过滤以后的所有的文件和文件夹的file对象表现形式
字节流
输入流:InputStream 字节输入流的超类 抽象类
输出流:OutputStream 字节输出流的超类 抽象类
字符流
输入流:Reader 字符输入流的超类
输出流:Writer 字符输出流的超类
文件流
FileInputStream 字节流 输入流 节点流 直接可以操作文件的
read()
read(byte[]) 最常用
read)(byte[],offset,len)
FileOutputStream 字节里 输出流 节点流
write(int)
write(byte[])
write(byte[[],off,len)最常用
FileReader 字符流 输入流 节点流
read(char[])
FileWriter 字符流 输出流 节点流
write(char[],offset,len)
// 读取和写入的格式
while((num=fis.read(数组对象))!=-1){
fos.write(数组对象,0,num);
}
复制文件的流程:
1 创建流对象
2 读取文件内容(循环读取)
3 写入目标文件(flush())
4 关闭流
缓冲流
BufferedInputStream 字节流 输入流 处理流
BufferedOutputStream 字节流 输出流 处理流
BufferedReader 字符流 输入流
BufferedWriter 字符流 输出流
直接操作的流的
readLine() 读取一行 返回值 String 循环读取时判断 返回值 !=null
newLine() 换行
\r\n也能实现文件内容的换行
转换流
字节转字符 继承自 Reader
InputStreamReader 字符流 输入流 处理流
字符转字节 继承自 Writer
OutputStreamWriter 字符流 输出流 处理流
编码格式 一定要统一
乱码的原因;
1 编码格式不统一
2 字节的缺失
1 对象流:
ObjectInputStream
Object readObject();
将文件中对象读取出来
ObjectOutputStream
writeObject(Object obj)
将对象写入到文件中
用流去村对象取对象前提是 类实现了 Serializable
序列化和反序列化:
如果想将对象持久化存储
需要对象转化成字节,这个过程叫做序列化
将字节转成成对象,这个过程叫做反序列化
序列化id 不写不报错,只会报警告
建议写上 可以帮助去区分版本
transient修饰不想序列化的属性 , 都存储的是默认值
2 标准输入流
System.in 会阻塞程序的运行等待用户的输入
标准输入流
System.out 会将内容打印到控制台上
标准错误流
System.err 会将内容打印到控制台上,颜色是红色的
3 打印流
PrintStream 字节打印流
可以new 也可以通过System.out得到
println
write
append
PrintWriter 字符打印流
4 内存流
ByteArrayInputStream
ByteArrayOutputStream
使用时,是以内存作为参考
1> ByteArrayInputStream(byte[] b) b是内存中数据的byte数组的展示形式
2> toByteArray() 返回值是byte[] 内存输出流调用的 返回值byte中存储的是内存流中的数据
3> baos.toString(); 将内存流中的数据转化成字符串
4>writeTo(OutputStream) 将内存流中的数据直接写入参数流中