-
1)file
- 对文件进行操作,创建删除,但不能对文件数据进行读取,或修改。
对象流
ObjectOutputStream,ObjectInputStream()
当前类实例若希望被对象流读写,那么当前类必须实现接口:java.io.Serializable
2)用于存储和读取基本数据类型或对象的处理流,它的强大之处就是可以吧java中的对象序列化,和反序列化.
3)实现了Serializable接口,并没有要求我们实现抽象方法,通常这种接口被称为标识接口.必须要提供一个modifier(修饰符) serialversionUID=long值 一个版本号.,如果不写会自动生成一个,但是当你序列化那个类改变的时候,还原就会发生匹配不上.
4)java的序列化机制是通过在运行时,判断类的serialVersionUid来验证版本的一致性的,在进行反序列化时,jvm会把传来的字节流中的serialVersionUID与本地相应的实体类的serialVersion进行比较,如果人为是一致的,就可以进行反序列化,否则就会出现序列化版本不一样的异常.
字节流
-
2)InputStream —OutputStream
- 字节输入输出流,是所有字节流的父类,基于字节操作。 3)fileinputStream—fileoutputStream
-
fileinputStream :文件读取流,对文件数据进行读取,单字节读取效率慢,所以需要用到,缓冲区,定义一个字节数组来存取,你所读到的字节,使用字符串进行转换。
fileoutputStream:文件写出流:一样对文件进行写入字节;写入效率慢,可自行定义缓冲区。可以使用缓冲流,如果发现文件已存在,则会清除存在的内容,写入新内容—构造方法支持传入一个boolean值,可以追加
缓冲流
- 缓冲流,分为字节缓冲流,和字符缓冲流, 字节缓冲流:BufferedInputStream ,BufferedOutputStream,字符缓冲流:BufferedReader,BufferedWriter ,它们都对读写效率进形加快,不用自己去定义缓冲区.按行读写数据
字符流
-
Writer—Reader
- 所有字符流的父类,字符流基于文本读写数据,底层实际还是完成字节,但是字符与字节的转换,自行完成了,getbytes(); InputStreamReader --OutputStreamWriter
- 它们都是转换流,对字节转换为字符,构造方法可以直接传入一个编码或解码格式,一般不会单独操作它们,会加上一个字符缓冲流,buffRered Buffwriter ,增加效率。 PrintWriter
- 具有自动行刷新的缓冲字符流,内部连接BufferedWriter作为其缓冲加速的部分,提供可以对文件直接写操作的构造方法。PrintWriter(Strinf path),PrintWriter(file)以上两种是按照默认的字符集写字符串,以上构造方法还可以传入一个字符集指定编码格式。它相当于PrintnWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStreamWriter(new File))));------------构造方法,你如果传入的是一个流,第二个参数再传一个true,会打开自动行刷新,“行”。会自动flush()。 BufferedReader----BufferedWriter --缓冲流
- BufferedReader:(块读)提高文本读取数据,还可以按行读取字符串,
BufferedReader:缓冲字符输入流提供的独有方法readLine(),读到每一行的末尾 |n符就会返回读第二行,读到文件末尾会返回null,如果一行只有换行符回返回空串(不是null)
BufferedWriter :不会一次写一行,但PrintWriter 有。
-
低级流
- 直接和文件进行操作的流,高级流不挑低级流 NIO2
-
1 ) java NIO被称为(new io,NOn-blocking IO),是一套新的api
2)NIO支持面向缓冲区的(IO是面向流的),NIO将以更加高效的方式进行文件的读写操作.
3)java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO
----java.nio.channels.Channel
-
----FileChannel:处理本地文件
-----SocketChannel: TCP网络编程的客户端的CHannel
-----ServerSocketChannel: TCP网络编程的服务器端的Channel
-----DatagramChannel:UDP网络编程中发送端和接收端的Channel
Path可以看成FIle类的升级版本,实际引用的资源也可以不存在
XML
-
xml读取
-
1)创建读取的流 SAXReader sax=new SAXReader();
2)通过你创建的流读取文件,读的时候传入你要读取哪个文件,返回一个文档Document
Document document= sax.read(new File(“path”))
3)获取根标签并返回, – Element root=document.getrootElement;
4)通过根标签找到所有子标签,并返回一个集合List-- List list= root.elements(String Element);
5)拿到装有子标签的集合List后,遍历list.
6)遍历的对象点element(String name),获取当前标签下指定的名字标签
7)获取当前标签后,点 getText(),返回标签中的文本(开始于结束标签的)
8)这两步可以直接调用 elementText(String name)来完成.
9)读取属性是 attributevalue(String name);
xml写入
-
1)创建一个Document(文档) Document document=DocumentHelper.currentDocument();
2)通过创建的Document对象来创建一个根元素 并返回它,–Element ent=document.addElement(String name);(注意根元素只有一个,所以它的方法只能创建一次).
3)通过返回的根元素创建子标签并返回该子标签,Element ee=ent.addElement(String name);
4)通过返回的子标签,创建你想要的子子标签并返回子子标签,Element e=ee.addElement(String,name);
5)t通过返回的子子标签.写入你想要的内容 e.addText(String text);
6)写入属性 e.addtrribute(“trributeName”,“text”);
7)创建一个XML的而写出流XMLWriter xml=new WMLWriter(
new FileutputStream(filepath);
Outputfotmat.careatprettyprint() 自动换行
);
8)xml.writer(document) ,关闭流.