文章列表
IO流处理
文件的读写操作处理
in/out
文件: 文件时具有永久存储及特定顺序的字节组成的一个有序的,具有名称的集合
流的分类:
按照方向分类:输入流和输出流
输入流:是从文件或磁盘等存储介质读取到程序中
输出流:从程序输出到存储介质或显示设备上
按照读写的单位来分类:字节流和字符流
字节流:每次读写一个字节,以字节为单位进行流处理操作
字符流:每次读写一个字符,以字符为单位进行读写处理的操作
数据源:
文件,视频,声音,文章
网络数据流
装饰者模式:
作用:就是在原理功能的基础上进行一个功能的进一步的扩展
对底层修改是关闭的,对扩展是开放的
JDK APIIO流的体系框架:
字节流:
InputStream
--FileInputStream
--FilterInputStream
--ObjectInputStream
--BufferedInputStream
OutputStream
--FileOutputStream
--FilterOutStream
--ObjectoutputStream
--BufferedOutputStream
字节流:
reader
--FileReader
--BufferedReader
--InputStreamReader
--FilterReader
writer
--FileWriter
--BufferedWriter
--OutputStreamWriter
--FilterWriter
File类
文件或文件夹的路径的抽象
File file = new File(E://upload"");
File file= new File("E://test.txt");
E盘upload文件夹下面的test.txt文件
File file = new file("E://upload","text.txt");
File file = new File ("E://upload//text.txt");
构造方法:
File(String path);//带参构造
File(String parent ,String child);
常用方法:
boolean exists()判断文件是否存在
boolean creatNewFile();在硬盘指定的位置创建指定的文件名的文件
boolean canRead();判断文件是否可读
boolean canWrite();判断文件是否可以写
String getName();获取文件的大写
boolean isFile(); 判断当前文件对象是否是文件
boolean delete(); 删除文件对象
boolean isDirectory();pan
boolean isDiretory(); 判断当前对象是否是文件夹
bolean mkdir(); 创建单个文件夹
boolean mkdirs(); 创建包含字目录的多层文件夹
file[] listfile(); 获取文件夹下面的所有文件
InputStream 抽象类
无法进行实例化,需要使用子类进行实例化。
常用方法:
read();每次读取一个字节
read(byte[] b);每次读取一个指定byte数组长度的字节,并且保存到byte数组中。
read(byte[] b,int start,int len);读取自定长度数据保存到数组
close();关闭流
FileIntputStream类:
InputStream的子类
作用:以字节的方式读取指定的文件的内容。
构造方法:
FileInputStream(File file); 带参构造,参数是文件对象 new File(String path);
FileInputStream(String filePath);带参构造,参数是文件路径
常用方法:
read();每次读取一个字节
read(byte[] b);每次读取一个指定byte数组长度的字节,并且保存到byte数组中。
read(byte[] b,int start,int len);读取自定长度数据保存到数组
close();关闭流
循环读取文件:
退出的标识值 -1
当读取的返回值为-1的时候,终止循环。
OutputStream类:
以字节的方式写入文件。
子类:
FileOutputStream类
构造方法:
FileOutputStream(File file);带参构造:参数是文件类对象
FileOutputStream(String path);带参构造:参数是文件路径字符串
常用方法:
write(byte b);往文件写入一个字节
write(byte[] b);批量写入byte[]数组长度的字节
write(byte[] b,int start,int len);写入指定长度的字节
close();关闭流
字符流:
字符编码:
unicode编码
常见的字符编码集:
ASCII : 美国信息互换标准代码
ISO-8859-1 : 欧洲国家使用的字符编码,单字节字符编码
Big5:台湾主要使用的字符编码集 繁体字
GBK:中国汉字的字符编码集
GB2312:对GBK字符编码集的扩展
SHIFT-J:日文字符编码集
Unicode :通用字符编码集又称 国际码
UTF-8:软件开发通用的字符编码集
字符流:
Reader:抽象类
InputStreamReader类
FileReader类
FileReader类的构造方法:
FileReader(File file);带参构造:参数是File对象
FileReader(String path);带参构造:参数是String路径
常用方法:
int read(); 读取一个字符
read(char[] c); 读取指定数组长度的字符保存到char数组中
read(char[] c,int start,int len);读取指定长度的字符
close();关闭流
String getEncoding()方法:主要是获取当前文件的字符编码
FileWriter:
类结构:
Writer:抽象类
--OutputStreamWriter类
--FileWriter类
FileWriter类:构造方法:
FileWriter(File file) 给一个File对象构造一个FileWriter对象。
默认:覆盖文件原来的内容。
FileWriter(File file,boolean append);
file:文件对象
append:true:追加
false:覆盖,原来文件被重写
FileWriter(String path);参数:文件绝对路径
默认:覆盖文件原来的内容
FileWriter(String path,boolean append);
path:文件的路径
append:true:在文件原来内容的后面追加内容
false:覆盖原来的内容
常用方法:
writer(int c); 代表字符的ascII值
writer(String);往文件中写入String字符串
writer(char[] cbuf);往文件中一次写入指定的数字长度的字符
writer(char[] cbuf,int off,int len);写入数组的一部分
getEncoding();获取文件的字符集
flush();刷新缓存
close();关闭流
转换流:
InputStreamReader类:
该类主要用于字节流和字符流直接的转换。
构造方法:
InputStreamReader(InputStream in); 参数:字节流读取对象
InputStreamReader(InputStream in,String charset);
in:字节流读取对象
charset:字符集
常用方法:
int read(); 读取一个字符
read(char[] cbuf);读取数组
read(char[] cbuf,int start,int len);读取部分数组
close();关闭流
OutputStreamWriter类
构造方法:
OutputStreamWriter(OutoutStream out);
OutputSTreamWRiter(OutputStream out,String charset);
out:字节写入流对象
charset:指定的字符集
常用方法:
write(int c); 写入一个字符
write(String str); 写入一个字符串
write(char[] cbuf);写入一个char数组
write(char[] cbuf,int start,int len);写入指定长度部分数组
flush();刷新缓存区
close();关闭流
乱码出现的解决方式:
原则:遵循编码集统一性。
字节缓冲流:
BufferedInputStream:字节读取缓冲流
BufferedOutputStream:字节写入缓冲流
read();
write(byte[] b);
主要用于文本文件的读写操作:
BufferedReader:字符读取缓冲流
readLine();读取一行
read([char[] c]);
BufferedWriter:字符写入缓冲流
newLine();写入一个换行符
write(char[] c);
通过缓冲区,缓存文件的信息,从缓存中读取文件,提高读写效率。
序列化和反序列化:
把对象转化二进制文件的形式,对象的序列化。
把二进制的形式转换成对象,反序列化。
ObjectInputStream 读取类
构造方法:
ObjectInputStream(InputStream in);
常用方法:
read();读取一个字节
readInt();读取一个整数
readDouble();读取一个双精度类型
readLong();读取浮点型
readObject();读取序列化的读写
close();
ObjectOutputStream 写入类
构造方法:
ObjectOutputStream(OutputStream out);
常用方法:
write(byte b);
writeInt(int i);写入一个整形
writeDouble(double d)写入一个浮点型
writeLong(long l)写入长整型
writeFloat(float f)写入浮点型
writeObject(Object obj);直接写入对象
close();
flush():
文件读取的时候要遵循文件的写入顺序,也就是文件写入的时候用的是什么类型,读取的时候也要按照顺读取该类型。
StringBuffer:
可变的字符串
构造函数:
StringBuffer() 创建一个默认长度为16的空字符串
StringBuffer(String str);创建一个指定参数值字符串
常用方法:
append(String str); 追加字符串
delete(int start,int end);删除字符串
insert(int index,String str);插入字符串
replace(int start,int end,String str);替换字符串
void setCharAt(int index,char ch);修改
面试题:String,StringBuffer,StringBuilder区别:
1.String是定长的不可修改的字符串
2.StringBuffer,StringBuilder是可变字符串
3.StringBuffer线程安全的,StringBuilder非线程安全的,处理速度快。