什么是流?
内存与存储设备之间传输数据的通道
流的分类
输入流:将<存储设备>中的内容读入到<内存>
输出流:将<内存>中的内容写入到<存储设备>中
字节流:以字节为单位,可以读写所有数据
字符流:以字符为单位,只能读写文本数据
节点流:具有实际传输数据的读写功能
过滤流:在节点流的基础之上增强功能
字节流的父类(抽象类):
InputStream: 字节输入流
OutputStream: 字节输出流
文件字节流
FileInputStream
Public int read(byte[] b) //从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
FileOutputStream:
Public void write(byte[] b) //一次写多个字节,将b数组中所有字节,写入输出流
字节缓冲流:
BufferedInputStream/BufferedOutputStream
提高IO效率,减少访问磁盘的次数
数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close
对象流
ObjectOutputStream/ObjectInputStream
增强了缓冲区功能
增强了读写8种基本数据类型和字符串功能
增强了读写对象的功能: 1.readObject() 从流中读取一个对象
2.writeObject(Object obj) 向流中写入一个对象
使用流传输对象的过程称为序列化、反序列化
使用ObjectOutputStream实现对象的序列化
使用ObjectInputStream实现对象的反序列化
要求:
- 序列化类必须要实现Serializable接口
- 序列化类中对象属性要求实现Serializable接口
- 序列化版本号ID,保证序列化的类和反序列化的类是同一类
- 使用transient(瞬间的)修饰属性,这个属性不能序列化
- 静态属性不能序列化
- 序列化多个对象,可以借助集合实现
字符编码
UTF-8 针对Unicode码表的可变长度字符编码
GB2312 简体中文
GBK 简体中文、扩充
................
字符流
字符流的父类:
Reader: 字符输入流
Writer: 字符输出流
文件字符流
FileReader:
public int read(char[] c) //从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1
FileWrite:
public void write(String str) //一次写多个字符,将b数组中所有字符,写入输出流
字节缓冲流
缓冲流:BufferedReader/BufferedWriter
高效读写,支持输入换行符,可一次写一行、读一行
打印流
PrintWriter:
封装了print()/println()方法,支持写入后换行
支持数据原样打印
转换流
桥转换流:InputStreamReader/OutputStreamWriter
可将字节流转换为字符流
可设置字符的编码方式
File类
概念:代表物理盘符中的一个文件或者文件夹
方法:
creatNewFile() //创建一个新文件
mkdir() //创建一个新目录
delete() //删除文件或空目录
exists() //判断File对象所所代表的对象是否存在
getAbsolutePath() //获取文件的绝对路径
getName() //取得名字
getParent //获取文件、目录所在的目录
isDirectory //是否是目录
isFile //是否是文件
length() //获得文件的长度
listFiles() //列出目录中的所有内容
rename() //修改文件名
FileFilter接口
public interface FileFilter
boolean accept(File pathname)
递归遍历文件夹
import java.io.File;
public class Diguibianli {
public static void main(String[] args) {
listDir(new File("d:\\myfiles"));
}
//递归遍历文件夹
public static void listDir(File dir){
File[]files=dir.listFiles();
System.out.println(dir.getAbsolutePath());
if(files!=null&&files.length>0){
for (File file:files){
if(file.isDirectory()) {
listDir(file); //递归
}else{
System.out.println(file.getAbsolutePath());
}
}
}
}
}
Properties:属性集合
特点:
1.存储属性名和属性值
2.属性名和属性值都是字符串类型
3.没有泛型
4.和流有关