java之IO流处理

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非线程安全的,处理速度快。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值