JAVA IO流的老师小结

Input / Output:指跨越出JVM的边界,与外界数据的源头或者目标数据源进行数据交换.
 
                    输出  Output
      ------------------------------->
JVM                                           数据源
      <-------------------------------
                    输入   Input

注意:输入/输出是针对JVM 而言。

File 类
可表示一个文件,也有可能是一个目录(在JAVA中文件和目录都属于这个类中,而且区分不是非常的明显,可以调用isDirectory()和isFile()来判断)。

File file = new File("c:\\abc.txt");

常用的方法:
	exists()		用来判断 文件或目录是否在硬盘存在。
	isDirectory()		判断是否是目录
	isFile()			判断是否是文件
	mkdir()			创建目录
	mkdirs()		创建目录包括它下面的子目录。
	getAbsolutePath()	得到文件绝对路径
	list()			得到文件名的String数组 (得到当前目录下的文件名,目录名)
	listFiles()		返回File类型数组,(目录,文件的File对象)可用getName()得到文件名。
	delete()		删除文件
	getName()		得到文件名
	getPath()		得到文件相对路径
	separtor()		得到文件分隔符 //这个方法有更好的通用性,平台不同结果不同
	deleteOnExit()	在进程退出的时候删除文件,常用在临时文件的删除。


1、流的概念:
	       输出流
	程序----------->文件、网络
	程序<-----------数据来源	
		输入流
2、流的分类:
	按处理方式来分:
		字节流:按8位传输 InputStream OutputStream
		字符流:按16位传输 Reader  Writer
	按功能来分:
		节点流:与文件、网络打交道的流,操作数据的来源
		处理流(包装流):操作节点流
	如何区分:		
		输入流:以InputStream、Reader结尾的流
				FileInputStream	BufferedReader
		输出流:以OutputStream、Writer结尾的流
				FileOutputStream	PrintWriter

		字节流:以InputStream、OutputStream结尾的流
		字符流:以Reader、Writer结尾的流

		节点流:看构造器,参数为数据来源,参数是String或File之类的
				new FileInputStream("d:\\abc.txt");
				new FileOutputStream(new File("d:\\abc.txt"))
		处理流:构造器的参数为其它流
				new BufferedReader(new InputStreamReader(new FileInputStream("d:\\abc.txt")));
				PrintWriter
	选择流时:
		首先确定是输入还是输出。
		其次确定是字节流还是字符流。
		然后确定是节点流还是处理流。

	根据数据类型选择输入/输出流:
		①byte、byte[]	InputStream / OutputStream
		②int、byte、char、double、String	DataInputStream / DataOutputStream
		③char、String	Reader / Writer
		④Object		ObjectInputStream / ObjectOutputStream
		若考虑性能会在前试着加Buffered

3、常用流:
	DataInputStream&DataOutputStream 用于读写基本类型数据,如int、float、long、double和boolean等。
	此外,DataInputStream的readUTF()方法还能读取采用UTF-8字符编码的字符串。
	
	BufferedInputStream&BufferedOutputStream
	因为利用了缓冲区,所以常用于提高读写数据的效率。
	BufferedInputStream先把一批数据读入到缓冲区,接下来read方法只需要从缓冲区内获得数据,减少了物理性读取数据的次数。
	可以使用BufferedInputStream(InputStream in, int size) 中的size来指定缓冲区的大小

	ObjectOutputStream&ObjectInputStream
	对象的序列化是指把对象写到一个输出流中,
	对象的反序列化是指从一个输入流中读取一个对象。
	Java语言要求只有实现了java.io.Serializable接口的类的对象才能序列化和反序列化

	Reader/Writer
	当需要程序读写文本文件,而且文本文件采用特定的字符编码集时,应采用Reader/Writer。

	InputStreamReader & OutputStreamWriter 桥梁流
	把字节流转换成字符流
	在桥转换的时候可以指定编解码方式
	new BufferedReader(new InputStreamReader(new FileInputStream("d:\\abc.txt"), "utf8"));
	BufferedReader
	readLine()方法可以一次读入一行字符,以字符串形式返回。

	PrintWriter 输出格式化的数据,所有的写数据的方法以print开头。
	print (int i)
	print (long l)
	print (float f)
	print (String s)
	
	每个print() 方法都有一个println()方法对应
	
	a.
	printWriter.println("Hello");
	b.
	printWriter.print("Hello");
	printWriter.println();
	c.
	printWriter.print("Hello\n");
	以上三段代码是等价的

4、JAVA编码问题:UTF-8,GBK,GB2312是可以显示中文的。
	ASCII			一个字符-----1B	任何一种编码均兼容	A<-->65
	ISO8859-1 (西欧)	一个字符-----1B
	GB2312 / GBK	一个字符-----2B
	Unicode		一个字符-----2B	会增加网络负担  Java中的char是Unicode
	UTF-8		变长字节(变长的Unicode方式)
			英文-----1B
			中文-----3B

	提供编码帮助的类:java.nio.charset.Charset
	GBK---中、日、韩,gb2312是GBK的子集

	会出现中文编码问题的情况:
		1、用流操作文件时
		2、网页(动态、静态)
		3、网络传递信息时

	String--->乱码(再次转码)
	String temp=p.getProperty("name");
	temp=new String(temp.getBytes("ISO8859-1"),"GBK");这两处的编码有时需要互换位置

对象序列化
	1:定义:把对象作为一个整体,在I/O流中传播
	2:语法:
	(1)实现了Serializeble接口的对象才能可序列化。这个接口里没有任何方法,没有方法的接口称为标记接口。
	例如:class Student implements Serializeble{} 
	(2)如果一个序列化后的对象里面有一个属性是个对象属性,那么这个对象属性也需要实现序列化。
	例如:class Student implements Serializeble{
	     Teacher t;//必须序列化
		}
		class Teacher implements Serializeble{}
	(3)包名、类名、属性可以被序列化
	方法、构造器不会序列化
	所有的静态属性都不会被序列化
	用transient关键字修饰的属性是临时属性,临时属性不参与序列化。 
        (4)当父类实现Serializeble接口,子类自动实现。对象序列化会创建对象,不调用构造,但子类实现Serializeble接口,
	父类没有实现实现Serializeble接口,父类在反序列化时会调用构造。

	3:使用注意:
	a.用readObject读文件的时候,当文件结束的时候会抛出EOFException,当我们捕获这个异常的时候,程序就结束了。
	Object o = null;
	while((o =ois.readObject()) != null) {
	
	}
	b.如果需要向一个文件中追加对象,首先要把文件中原有的对象读出来,再把原有对象和新追加的对象一起写入到文件。
	
	c. serialVersionUID是静态常量,表示当前对象的版本号,在接受传输的数据时会自动检查该值,保证版本的相同。

java.util.Properties属性类,针对属性文件操作,早期使用。
	好处是可以在不修改代码的情况下改变相应的需求。
	文件名以.properties结尾的文件称为属性文件
	文件的内容是:名字=值 的形式
	常用方法:	
		public void load(InputStream inStream)throws IOException
		public void store(OutputStream out,String comments)throws IOException
		public String getProperty(String key)
		public String getProperty(String key,String defaultValue)
		public Object setProperty(String key,String value)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值