io流

1:IO流
(1)分类
字节流:
输入流:
InputStream
int read()
int read(byte[] bys)
FileInputStream
BufferedInputStream
输出流:
OutputStream
write(int by)
write(byte[] bys,int index,int len)
FileOutputStream
BufferedOutputStream

	字符流:
		输入流:
			Reader
				int read()
				int read(char[] chs)
			FileReader
			BufferedReader
				String readLine()
		输出流:
			Writer
				write(int ch)
				write(char[] chs,int index,int len)
			FileWriter
			BufferedWriter
				write(String line)
				void newLine()
(2)到底使用谁?
	如果能用记事本打开,不出现乱码,就优先使用字符流;否则用字节流。
	确定上面的情况以后,一般都是用高效流(BufferedXxxx)

	
(3)复制文本文件:
	9种方式:
		字节流:
			4种
				基本流每次操作一个字节
				基本流每次操作一个字节数组
				高效流每次操作一个字节
				高效流每次操作一个字节数组(★)
		字符流:
			5种
				基本流每次操作一个字符
				基本流每次操作一个字符数组
				高效流每次操作一个字符
				高效流每次操作一个字符数组(★)
				高效流每次操作一行文本(★)

	思路:
		1. 创建缓冲字符输入流对象(建立于文件系统中文件的对应关系)
		2. 创建缓冲字符输出流对象(建立于文件系统中文件的对应关系)
		3. 使用输入流对象的read方法,读出源文件中内容(显示/其他操作)
		4. 使用输出流对象的write方法,写入数据到目的地文件(需要刷新)
		5. 关闭流,释放资源

	怎么选择使用?
		

	代码体现:
		数据源:a.txt
		目的地:b.txt

	思路:
		1. 创建缓冲字符输入流对象(建立于文件系统中文件的对应关系)
		2. 创建缓冲字符输出流对象(建立于文件系统中文件的对应关系)
		3. 使用输入流对象的read方法,读出源文件中内容(显示/其他操作)
		4. 使用输出流对象的write方法,写入数据到目的地文件(需要刷新)
		5. 关闭流,释放资源
	代码体现:
		//创建对象
		BufferedReader br = null;
		BufferedWriter bw = null;
		try{
			//实例化对象
			br = new BufferedReader(new FileReader("a.txt"));
			bw = new BufferedWriter(new FileWriter("b.txt"));

			//读取内容
			String len = null;
			while((len = br.readLine())!= null){
				//写入数据
				bw.write(len);
				bw.newLine();
				bw.flush();
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(br != null){
				try{
					br.close();
				}catch(Exception e){
					e.printStackTrace();
				}
			}
			if(bw !=  null){
				try{
					bw.close();
				}catch(Exception e){
					e.printStackTrace();
				}
			}

		}

		

(4)复制二进制流数据:(图片,视频,音频等)
	字节流:
			4种
			基本流每次操作一个字节
			基本流每次操作一个字节数组
			高效流每次操作一个字节
			高效流每次操作一个字节数组(★)
	
	

	怎么选择使用?
		选用高效流每次操作一个字节数组

	代码体现:
		数据源:c:\\a.jpg
		目的地:d:\\b.jpg

	思路:
		1. 创建缓冲字节输入流对象(建立于文件系统中文件的对应关系)
		2. 创建缓冲字节输出流对象(建立于文件系统中文件的对应关系)
		3. 使用输入流对象的read方法,读出源文件中内容(显示/其他操作)
		4. 使用输出流对象的write方法,写入数据到目的地文件(需要刷新)
		5. 关闭流,释放资源
	
	//创建对象
	BufferedInputStream bis = null;
	BufferedOutputStream bos = null;
	try{
		//实例化对象
		bis = new BufferedInputStream(new FileInputStream("c:\\a.jpg"));
		bos = new BufferedOutputStream(new FileOutputStream("d:\\b.jpg"));
		
		//读取
		byte[] bys = new byte[1024];
		int len = 0;
		while((len = bis.read(bys))!= -1){
			//写入数据
			bos.write(bys,0,len);
		}	
	}catch(IOException e){
		e.printStackTrace();			
	}fianlly{
		if(bis != null){
			try{
				bis.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		if(bos !=  null){
			try{
				bos.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	
	}

2:转换流(理解)
(1)如果有字节流对象,为了使用字符流的功能,就必须使用转换流进行操作。
(2)案例:
键盘录入数据

	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	BufferddWriter bw = new BufferedWriter(new FileWriter("a.txt"));

	String line = null
	while((line=br.readLine())!=null)
	{
		if("over".equals(line))
		{
			break;
		}

		bw.write(line);
		bw.newLine();
		bw.flush();
	}

	bw.close();
	br.close();

	把文本文件的数据通过流对象在控制台显示

	BufferedReader br = new BufferedReader(new FileReader("a.txt"));
	BufferddWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

	String line = null
	while((line=br.readLine())!=null)
	{
		bw.write(line);
		bw.newLine();
		bw.flush();
	}

	bw.close();
	br.close();

3:打印流(掌握)
(1)打印流是写数据的。
(2)特点:
A:可以写任意数据类型的数据
B:如果启动了自动刷新,能自动刷新,还会换行。println()
C:可以直接往文件写数据
注意:哪些流对象可以直接读写文件?
看构造方法,如果同时有String和File的构造参数,那么该流对象就可以读写文件。
(3)用打印流改进复制文本文件的操作
数据源:
c:\a.txt
目的地:
d:\b.txt

	BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));
	PrintWriter pw = new PrintWriter(new FileWriter("d:\\b.txt"),true);

	String line = null;
	while((line=br.readLine())!=null)
	{
		pw.println(line);
	}

	pw.close();
	br.close();

4:序列化流(理解)
(1)序列化:把对象按照流一样的方式在网络中传输,或者存储到文本文件
反序列化:把流数据还原成对象
(2)如何实现序列化?
A:被序列化的对象所属的类必须实现序列化接口
B:用序列化流对象进行操作
(3)序列化(对象)流对象
ObjectInputStream:
Object readObject()
ObjectOutputStream:
void writeObject(Object obj)
(4)掌握:
A:看到类实现了序列化接口,就知道该类可以被序列化流对象操作
B:看到类实现了序列化接口,知道点击鼠标就可以解决黄色警告问题
5:字符编码(理解)
(1)编码表:
就是字符和对应的数据组成的一张表。
(2)常见的编码表:
ASCII
ISO-8859-1
GBK
GB2310
GB18030
UTF-8
BIG5 – 自己问问度娘
(3)转换流中的编码问题
A:字符流 = 字节流+编码表
B:通过转换流写入数据,指定为UTF-8编码,并通过UTF-8编码读取。

6:Properties(理解)
(1)是Map体系一个集合类。
(2)特点:
A:可以把集合中的数据保存到文本文件,也可以把文本文件的数据加载到集合中。
B:该集合的键和值都是String类型
(3)特殊功能:
A:setProperty(String key,String value)
B:getProperty(String key)
getProperty(String key,String defaultValue)
C:Set stringPropertyNames()
(4)和IO流结合的方法:
A:list 通过打印流把数据保存到文件中
B:load 通过任意流把文本中的数据加载到集合中
C:store 通过任意流把数据保存到文件中
(5)案例:
查找文件中是否有键为lisi的,如果有,则修改其值为50

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值