Java-IO流
I/O 输入/输出 流(数据流动)
输入为读取;输出为写入
按照流动的方向:读数据(输入Input) 写数据(输出Output)
文件流,字符流,数据流,对象流,网络流。。。
文件
一种电脑的存储形式
File类----->与电脑上的文件或文件夹产生一一对应的映射关系
再java.io包中,是文件或目录路径名的抽象表现形式,与真实硬盘中的文件或文件夹不是一个东西
File是在内存中的一个对象<-- 映射–>硬盘上的文件或文件夹
File file = new File(“D:/test.txt”);
file.canRead(); //判断是否可读
file.canWrite(); //判断是否可写
file.isHidden(); //判断是否隐藏
file.isFile(); //判断当前file是否是一个文件
file.isDirectory(); //判断当前文件是否是一个文件夹
file.getAbsoluteFile(); //获取绝对路径
file.getName(); //获取文件名
file.createNewFile(); // 创建新文件
file.mkdir(); //创建新文件夹
file.getParent();
File parentFile = file.getParentFile();
file.list();
File[] listFiles = file.listFiles(); listFiles == null 是个文件, listFiles != null && listFiles.length != 0 是一个带子元素的文件夹
操作文件中的内容--------->通过流I/O的方式完成
文件流
按照读取或写入的单位(字节数)的大小来区分
字节型文件流(1字节)
FileInputStream
创建对象:1-参数可以是一个file类型的
2-参数可以是一个String类型的
一个字节一个字节读取,read() 返回字节的code码
利用数组读取,read(byte[] b) 返回有效元素的个数 读取内容放入数组中,再通过数组输出;此时应注意字节转换成字符串时String(b, 0, count),读取到的有效字节写入,否则容易出现最后文件末尾读取错误;
available() 流管道中有多少缓存的字节,在读取网络数据的时候可能会存在问题
skip(long count) 跳过多少字节开始读取
close()将流管道关闭,最好放在finally中,注意代码的健壮性,判断严谨
FileOutputStream
创建对象
参数可以是一个file类型
参数可以是一个String类型
write()写入 写入到流管道中,并非直接操作硬盘中的文件,而是操作file对象,file对象与文件有映射作用
write(byte[] b)写入一组数据
flush()刷新,建议必写,将管道中的字节推入文件中
如果出现两种流,在关闭时,建议使用两个异常处理进行关闭,防止其中一个出现异常未关闭成功影响另一个关闭;
字符型文件流(2字节–>1字符)
FileReader/FileWriter
继承 InputStreamReader/OutputStreamWriter
read()方法只能传int,char[]
write()方法可以传String类型,char[],int
缓冲流
再流管道中增加缓存的数据,提升性能
BufferedInputStream/BufferedOutputStream
BufferedReader/BufferedWriter
对象流
ObjectInputStream | ObjectOutputStream |
---|---|
对象的序列化 | 反序列化 |
将一个完整的对象,拆分成字节碎片,记录在文件中 | 将一个文件中记录的对象,反过来组合成一个完整的对象 |
对象类需要实现Serializable | 需要给对象类提供一个序列化的版本号 private long serialVersionUID = 任意 |