io流
主要内容,操作系统的中的文件目录,重点操作文本文件.读取或者生成文本文件.jdk对于io操作的类通常保存在java.io包中.
java.io.File
特点:java中使用java.io.File描述系统中的文件或者目录.可以创建或者删除系统中的文件或者目录,读取文件或者目录的属性(文件名,文件操作权限),无法操作文件中的内容.
文件的基本概念
在计算机系统中的文件底层本质就是byte序列.对于文件的操作实际上就是操作byte的序列.操作系统中可以使用文件的逻辑路径表示一个文件.通过该逻辑路径访问操作对应的文件,操作系统中使用/(windows和linux中)对逻辑路径进行分隔.
java.io.File中常见的API
- File的构造器:new File(逻辑路径);默认的路径为当前的工程下面
- File#exists():判断文件在磁盘中是否存在
- File#mkdir()/File#mkdirs():创建目录
- File#createNewFile():创建文件
- File#delete():删除文件/目录(必须是空目录)
- File#getPath():获得相对路径
- File#getAbsoultePath():获得绝对路径
- File#getName():获得文件的名称
- File#lists():获得当前目录下所有的文件/目录
- File#listFiles(FileFilter):根据条件获得内容
io流基本的概念
- 序列化:流化,将内存中的数据写入到文件.输出流
- 反序列化:从文件中读取的数据.输入流
字节流
概念:操作系统中文件本质就是byte集合,如果需要操作文件中的内容,需要操作byte集合.jdk提供了字节流操作文件.字节流主要的功能是java.io.InputStream输入流以及java.io.OutputSteram输出流进行定义.
- InputStream:字节流的输入流,通过输入流将数据读取到程序当中,读取文件.通过输入流实现反序列化.
- OutputStream:字节流的输出流,通过输出流将内存中的数据写入到文件,生成文件.通过输出流实现序列化.
FileOutputStream
概念:OutputStream的一个子类,提供对于文件操作的API的实现.
- FileOutputStream:生成文件
- FOS#write(byte):写入一个字节
- FOS#write(byte[],offset,length);
- FOS#flush():执行刷新的操作
- FOS#close():物理资源,手动释放
FileInputStream
- FileInputStream:读取文件
- FIS#read():读取一个字节
- FIS#read(byte[]):将文件中的数据读入到byte数组中
- FIS#close():物理资源,手动释放
jdk7.0提供的try-with-resourse
概念:由于io属于物理资源,物理资源必须手动释放(调用close方法).需要使用try…finally手动处理物理资源,会影响程序的结构,而且早期提供的close方法不适用于目前的操作系统存在一定的bug.jdk7.0提供了AutoCloseable接口,只要实现了该接口,就可以自动释放物理资源,无需通过finally进行处理
try( //初始化io流的资源 ){
//操作io流
}[catch(异常 e){
//处理异常
}]
字节流的缓冲流
概念:底层提供一个缓冲的byte数组,优化字节流的操作.BufferedInputStream(输入流的缓充流),BufferedOutputStream(输出流的缓充流).
字符流
概念:字符流专门对文本文件进行操作的流,通过字符流可以快速读取文本文件中的内容或者向文本文件写如字符串.
Reader和Writer
定义了字符流的基本的功能,可以写如一个字符或者字符串.或者可以读取一个字符
Writer:抽象类,字符流的基本API
- OutputStreamWriter:设定字符编码
- OSW#write(String):写入一个字符串
- BufferedWriter:缓冲流
- BW#newLine():提供一个兼容度高的换行符
- FileWriter:便捷流,只能使用默认的字符编码
- PrintWriter:便捷流,可以自动刷新
- PW#println(String):写入字符串,自动提供换行
- OutputStreamWriter:设定字符编码
Reader:抽象类,字符流的基本API
- InputStreamReader:设定字符编码
- ISR#read():读取一个字符
- ISR#read(char[]):
- BufferedReader:缓冲流
- BR#readLine():读取一行记录
- FileReader:便捷流,只能使用默认的字符编码
- InputStreamReader:设定字符编码
提供io流如何操作文件
兼容任意文件只能是字节流
//读入文件:输入流 BIS bis=new BIS(new FIS(文件)); //生成文件:输出流 BOS bos=new BOS(new FOS(文件));//总是创建新的文件 BOS bos=new BOS(new FOS(文件,true));//表示内容采用追加的形式
操作文本文件
//读入文件 FR fr=new FR(文件); BR br=new BR(new ISR(new FIS(文件),charset));//指定字符编码 //生成文件 FW fw=new FW(文件); BW br=new BW(new OSW(new FOS(文件,true),charset)); PW pw=new PW(文件);
对象流
概念:将实例对象进行流化,目的就是方便在网络中进行传输.一个类的实例如果需要被序列化,那么必须实现Serializable接口.
深克隆
概念:通过对象的序列化和反序列化可以实现的对象的深克隆.