Java高级—I/O框架
一、流的概念
1.概念:内存和硬盘/存储设备的通道
输入:存储-》内存 input
输出:内存-》存储 output
字节流:读写所有数据(所有数据都是字节存储)
字符流:只能读写文本
字节流的父类(abstract):inputstream和outputstream
二、字节流
Fileinputstream类(普通)/Fileoutputstream类
1.read() 每次读一个字节,读到末尾为-1
while(fis.read()!=-1){
syso(fis.read())
}
read(new byte[3]) 返回值为size
byte[] buf=new byte[3]
while(fis.read(buf)!=-1){
syso(new String(byf,0,count))
}
2.write()
String s="helloworld"
fos.write(s.getBytes())
在new的时候可以append避免覆盖而是追加
3.字节流复制文件
Fileinputstream f1=new Fileinputstream("c:\\001.txt")
Fileoutputstream f1=new Fileoutputstream("c:\\002.txt")
byte[] buf=new byte[1024]
int count=0
while((count=fis.read(buf))!=-1){
fos.write(buf,0,count)
}
fis.close()
fos.close()
Bufferedinputstream类(高效)字节缓冲输入流/Bufferedoutputstream类(高效)字节缓冲输出流
Bufferdinputstream bis=new Bufferdinputstream(new Fileinputstream("c:\\001.txt"))
Bufferdoutputstream bos=new Bufferdoutputstream(new Fileoutputstream("c:\\002.txt"))
while((count=bis.read())!=-1){
bos.write(count)
}
bis.close()
bos.clos()
默认缓冲区大小8192(8kb)
拷贝纯文本用字符流,其他用字节流
对象流Objectoutputstream和Objecinputstream
1.增强了缓冲区和读写对象的功能
2.实现序列化Objectoutputstream,对象必须实现 serializable接口才能output进去,其中的对象类也要实现serializable接口
3.常用方法
readObject()
writeObject()
4.序列化版本号ID常量加上后保证序列化和反序列化是同一个类
5.使用transient修饰后就不能序列化了
6.静态属性无法序列化(无法保存到硬盘)
7.序列化多个对象可以放在集合中,读取时进行类型强制转换
## 三、字符流
### Filereader类(普通)/Filewriter类
1.以char形式读取和写
2.字符编码:utf-8默认
3.一个字节有八位
ASCII码:一个英文字符是一个字节,一个中文字符是两个字节
utf-8:一个英文字符是一个字节,一个中文字符是三个字节
Unicode:中英文都是两个字节
4.字符流实现文件复制
Filereader fr=new Filereader("c:\\001.txt");
Filewriter fw=new Filewriter("c:\\002.txt");
int data=0
while((data=fr.read())!=-1){
fw.write(data)
fw.flush
}
fr.close()
fw.close()
Bufferedreader类/Bufferedwriter类
1.高效读写,支持输入换行符,可一次写一行,一次读一行
2.read()
char[] buf=new char[1024]
int count=0
while((count=br.read(buf))!=-1){
syso(new String(buf,0,count))
}
3.readline()
String line=null
while((line=br.readline())!=null){
syso(line)
}
4.printline
和硬盘数据一样,不会是97-》a
三、转换流
Inputstreamreader/Outputstreamreader
input~:字节流到字符流
output~:字符流到字节流
四、File类
1.代表文件或者文件夹
2.常用方法
(1)#路径分隔符;
#名称分隔符\
(2)文件操作
file.createNewfile() 创建文件
file.exists() 判断文件是否存在
file.delete() 删除文件
file.getAbsolutepath() 获取绝对路径
file.getPath() 获取相对路径
file.getname() 获取名称
file.getparent() 获取父母
file.lastmodified() 获取创建时间
file.canwrite() 获取是否可写
file.isfile() 是否文件
file.ishidden() 是否隐藏
(3)文件夹操作
dir.mkdirs() 创建文件夹
dir.delete() 删除文件夹
dir.isdirectory() 是否文件夹
dir.list() 获取所有文件夹的内容
(4)Filefilter接口
File[] files=dir.listFiles(new FileFilter(){
public boolean accept(Fine pathname){
if(pathname.getName().endswith(".jpg")){
return true;
}
return false;
}
})
五、Properties
1.继承hashtable
2.没有泛型和流有关,都是字符串类型
3.方法
setproperty()
keyset()
entryset()
stringPropertynames() 得到所有属性名的set集合
3.和流有关的方法
PrintWriter pw=new PrintWriter("d:\cc.txt")
properties.list(pw)
pw.close()
Fileoutputstream fos=new Fileoutputstream("d:\store.properties")
properties.store(fos,"hhhh")
fos.close()
Fileinputstream fis=new Fileinputstream("d:\store.properties")
properties.load(fis)
fis.close()