IO流
IO流
I/O 输入、输出 流(数据流动)
数据流动的方向 读数据(输入input) 写数据(输出output)
文件流 字符流 对象流 网络流.......
1. File
与电脑上的文件或文件夹产生一一对应的映射关系
文件:
电脑上的一种存储形式
文件有不同的格式 .txt .doc .ppt .mp4 .jpg .rar ...
文件夹---目录路径
1.文件或目录路径名(文件夹)的抽象表示形式
2.File与真实硬盘中的文件或文件夹 不是一个东西
File是内存中的一个对象<--映射-->硬盘上的文件或文件夹
2.File类中的常用方法
canRead() canWrite() isHidden() isFile() isDirectory()
length()
获取文件中字节的个数
lastModified()
获取文件最后的修改时间-毫秒值
*getAbsolutePath()
获取文件的绝对路径 d://text
绝对路径-->可以通过完整的字符串 定位盘符 文件夹 文件
相对路径没有盘符的写法-->当前项目的所在位置找寻(F:\workplace\SSM\javase\text\22.txt)
*getName()
获取文件的名字 text.txt
creatNewFile() 创建文件
创建文件夹
madkir()
外层没有不能创建
madkirs()
外层没有,也会同时创建
*getParent()
获取当前file的父文件名
**getParentFile()
获取当前file的父亲对象
String[] names=list()
获取当前file对象所有子元素的名字
File[] files=listFiles()
获取当前file的所有的儿子对象
delete()
删除文件或空的文件夹,不能删掉带元素的文件夹
1.文件夹的遍历---需要递归
2.什么叫文件流
读取文件中的内容 向文件中中写内容
文件输入流 文件输出流
字节型文件输入流 字节型文件输出流
字符型文件输入流 字符型文件输出流
stream
1.io
流按照方向(功能)来区分
in(读取) out(写入)
操作的目标来区分
文件流 数组流 字符串流 数据流 对象流 网络流......
2.字节IO流:
1.字节型文件输入流:
FileInputStream
1.包 java.io
2.父类--InputStream
3.创建对象
调用一个带File类型的构造方法
File file = new File( new File());
调用一个带String类型的构造方法
File file = new File("d://test//test.txt");
4.常用方法:
int code=read() 每次从流管道中读取一个字节 字节的code码
*int count=read(byte[]) 每次从管道中读取若干个字节 存入数组内 返回有效元素个数
new byte[1024] 通常创建的数组 1kb-8kb之间 1kb-1024字节
int count=available() 返回流管道中还有多少缓存的字节数
*skip(long n) 跳过几个字节 再读取
*close() 关闭流通道 必须要做 放到finally 注意代码的健壮性(考虑空指针)
多线程-->利用几个线程同时读取文件
10000字节 5个小人同时读取
1-2000 2001-4000 4001-6000......
2.字节型文件输出
FileOutStream
1.java.io
2.继承OutputStream 所有字节型输入流的父类
3.创建对象
new FileOutStream(File) new FileOutStream(File,append)
new FileOutStream(String) new FileOutStream(String,append)
4.常用方法:
write(int code);将给定的code对应得字符写入文件
write(byte[]) 将数组中的全部文件写入文件
flush() 将管道内的字节推入文件
close() 关闭流通道
3.特点
字节流优点在于什么类型的文件都可以处理
缺点在于处理纯文本文件时可能会产生乱码问题
3.字符型IO流
只能操作纯文本文件.txt 。properties /.doc(不是)
FileReader
1.java.io
2.继承 InputStreamReader Reader
3.构造方法(file,string)
reead()
read(char[])
FileWriter
2.继承 OutputStreamWriter Writer
3.构造方法
file boolean
string boolean
4.常用方法
write(int)
write(char[])
write(string)
flush close
编码问题:
字节型: String s="fe";
byte[]=s.getBytes("utf-8");
new String(byte[],"utf-8");
字符型:通过修改文件或ide编码格式
4.文件流
读取文件中的信息in 将信息写入文件中out
文件流按照读取或写入的单位(字节数)大小来区分
字节型文件流(1字节)
FileInputStream/FileOutStream
字符型文件流(2字节-1字符)
FileReader/FileWriter
读取文件中的内容 向文件中中写内容
文件输入流 文件输出流
字节型文件输入流 字节型文件输出流
字符型文件输入流 字符型文件输出流
容器
1.容量 只能存一份
2.数组 存储好多个 数据类型统一
3.集合 存储好多个 存储后个数还能改变 泛型--数据类型统一
如上三个都是java中的类型(对象-->内存)
都存储在内存中 程序执行完毕 虚拟机停止的时候 内存空间就回收了
4.文件 存储好多信息
文件时存储在硬盘上的-->永久性保存
数据虽然安全 但文件不在内存中 需要通过io操作文件
5.缓冲流
在流管道内增加缓存的数据
让我们使用流读取的文字更加的流畅
高级流----->创建通过低级流
BufferedInputStream/BufferedOutputStream
BufferedReader/BufferedWriter
BuffererInputStream
构建方式 使用低级流 构建
基本使用与低级流的方法完全一致
read() skip() available() close()
BufferedOutputStream
构建方式 使用低级流构建 注意 缓冲流构建的时候没有boolean类型的参数
基本使用与低级流的方法完全一致
write() flish() close()
BufferedReader
readLine() -一次读一行
BufferedWriter
newLine()-换行
总结
InputStream OutputStream
Reader Writer
文件流
低级
字节型 FileInputStream FileOutPutStream
字符型 FileReader FileWriter
*缓冲
字节型 BufferedInputStream BufferedOutputStream
字符型 BufferedReader BufferedWriter
数组流
byte数组 ByteArrayInputStream ByteArrayOutputStream
char数组 CharArrayReader CharArrayWriter
字符串流
StringReader StringWriter
数据流
DataInputStream DataOutPutStream
*对象流-将对象直接存入文件中
ObjectInputStream ObjectOutputStream
对象的序列化/反序列化
对象的序列化指的是:将一个完整的对象拆分成字节碎片 记录在文件中
反序列化:将文件中记录的对象 反过来组合成一个完整的对象
如果要将对象序列化到文件中
需要让对象实现Serializable接口(示意性接口)
如果要将对象反序列化
需要给对象提供一个序列化的版本号
private long serialVersionUID=任意l;(也可以不写)