Java基础IO流(知识体系详解)【五】
2021/7/17 12:35:07
本文主要是介绍Java基础IO流(知识体系详解)【五】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
IO流知识体系架构图
1.字节输出流(FileOutputStream)
1.1.构造方法
a.FileOutputStream fis = new FileOutputStream(String pathName)
b.FileOutputStream fis = new FileOutputStream(String pathName,boolean append) [追加写入流的构造,需要把第二个参数设置为true]
c.FileOutputStream fis = new FileOutputStream(File file)
d.FileOutputStream fis = new FileOutputStream(File file,boolean append)[追加写入流的构造,需要把第二个参数设置为true]
1.2.常用方法
a.write(int c) -> 写一个字节的数据到文件中.
b.write(byte[] bys) -> 写一个字节数组的数据到文件中.
c.write(byte[] bys,int off,int len) -> 写一个字节数组的一部分到文件中,从索引off开始写,写len个数据.
d.如果只是单纯的向文件中写入一个字符串 -> write(byte[] bys) write(“字符串”.getBytes());
1.3.注意
流使用完之后要释放资源
2.字节输入流(FileInputStream)
2.1.构造方法
a.FileInputStream fis = new FileInputStream(String pathName)
b.FileInputStream fis = new FileInputStream(File file)
2.2.常用方法
a.read(); -> 一次读取一个字节的数据,会将读取到的数据封装到返回值int.
b.read(byte[] bys); -> 一次读取一个字节数组的数据,会将读取到的数据封装到字节数组中,返回值表示本次读取到的有效数据的个数..
2.3.注意
1.read()和read(byte[] bys)返回的int类型的数据是有区别的.
2.无参read()方法会将读取到的数据封装到int(返回值)中.
3.有参read()方法会将读取到的数据的有效个数封装到int(返回值)中.
3.缓冲字节输出流(BufferedOutputStream)/font>
3.1.构造方法
a.BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(String pathName/File file))
3.2.常用方法
a.write(int c) -> 写一个字节数据到文件中.
b.write(byte[] bys) -> 写一个字节数组的数据到文件中.
c.write(byte[] bys,int off,int len) -> 写一个字节数组的一部分到文件中.
3.3.注意
缓冲字节输出流和字节输出流的使用方式是一样的,但是缓冲字节输出流的效率比字节流要高.
4.缓冲字节输入流(BufferedInputStream)/font>
4.1.构造方法
a.BufferedInputStream bis = new BufferedInputStream(new FileInputStream(String pathName/File file));
4.2.常用方法
a.read(); -> 一次读取一个字节的数据,会将读取到的数据封装到返回值int.
b.read(byte[] bys); -> 一次读取一个字节数组的数据,会将读取到的数据封装到字节数组中,返回值表示本次读取到的有效数据的个数.
4.3.注意
缓冲字节输入流和字节输如流的使用方式是一样的,但是缓冲字节输入流的效率比字节流要高.
5.原生字符输出流(转换流)(OutputStreamWriter)
5.1.构造方法
a.OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(String pathName/File file));
b.OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(String pathName/File file),String characterName);
5.2.常用方法
a.write(int c) -> 写一个字符数据到文件中.
b.write(char[] chs) -> 写一个字符数组的数据到文件中.
c.write(char[] chs,int off,int len) -> 写一个字符数组的数据的一部分到文件中.
(重要)
d.write(String str) -> 写一个字符串的数据到文件中.
(重要)
e.write(String str,int off,int len) -> 写一个字符串的一部分到文件中.
5.3.注意
1.如果之后没有指定编码的情况(使用默认编码的情况下,要便捷字符流)
2.以后如果要将指定的字节流转换为字符流的话还是要用转换流的.
5.4.特别方法
flush() -> 将缓冲区的数据刷新到文件中.
6.原生字符输入流(转换流)(InputStreamReader)
6.1.构造方法
a.InputStreamReader isr = new InputStreamReader(new FileInputStream(String pathName/File file))
b.InputStreamReader isr = new InputStreamReader(new FileInputStream(String pathName/File file),String characterName)
6.2.常用方法
a.read() -> 一次读取一个字符的数据,会将读取到的数据封装到int返回值中.
b.read(char[] chs) -> 一次读取一个字符数组的数据,会将读取到的数据封装到chs数组中,将读取到的有效数据的长度封装到返回值中.
7.便捷字符输出流(FileWriter)
7.1.构造方法
a.FileWriter fw = new FileWriter(String pathName/File file)
b.FileWriter fw = new FileWriter(String pathName/File file,boolean append)
7.2.常用方法
a.write(int c) -> 写一个字符数据到文件中.
b.write(char[] chs) -> 写一个字符数组的数据到文件中.
c.write(char[] chs,int off,int len) -> 写一个字符数组的数据的一部分到文件中.
(重要)
d.write(String str) -> 写一个字符串的数据到文件中.
(重要)
e.write(String str,int off,int len) -> 写一个字符串的一部分到文件中.
7.3.注意
1.如果使用便捷字符输出流的话呢,会使用默认编码,如果要使用指定编码,请使用父类.
2.如果要追加写入,直接给出第二个参数为true.
7.4.特别方法
flush() -> 将缓冲区的数据刷新到文件中.
8.便捷字符输入流(FileReader)
8.1.构造方法
a.FileReader fr = new FileReader(String pathName/File file)
8.2.常用方法
a.read() -> 一次读取一个字符的数据,会将读取到的数据封装到int返回值中.
b.read(char[] chs) -> 一次读取一个字符数组的数据,会将读取到的数据封装到chs数组中,将读取到的有效数据的长度封装到返回值中.
8.3.注意
如果使用便捷字符输入流的话呢,会使用默认编码,如果要使用指定编码,请使用父类.
9.缓冲字符输出流(BufferedWriter)
9.1.构造方法
a.BufferedWriter bw = new BufferedWriter(new FileWriter(String pathName/File file));
9.2.常用方法
a.write(int c) -> 写一个字符数据到文件中.
b.write(char[] chs) -> 写一个字符数组的数据到文件中.
c.write(char[] chs,int off,int len) -> 写一个字符数组的数据的一部分到文件中.
(重要)
d.write(String str) -> 写一个字符串的数据到文件中.
(重要)
e.write(String str,int off,int len) -> 写一个字符串的一部分到文件中.
9.3.注意
如果操作的文件是文本文件,那么请使用缓冲字符流.
9.4.特别方法
newLine() -> 会根据当前的系统属性输出一个换行符. flush() -> 将缓冲区的数据刷新到文件中.
10.缓冲字符输入流(BufferedReader)
10.1.构造方法
a.BufferedReader br = new BufferedReader(new FileReader(String pathName/File file))
10.2.常用方法
a.read() -> 一次读取一个字符的数据,会将读取到的数据封装到int返回值中.
b.read(char[] chs) -> 一次读取一个字符数组的数据,会将读取到的数据封装到chs数组中,将读取到的有效数据的长度封装到返回值中.
c.readLine() -> 读取一行数据,并且返回一个String字符串. 读取到的数据不包含换行符,如果读取到了文件末尾,则返回的String是null.
10.3.注意
如果操作的文件是文本文件,那么请使用缓冲字符流.
10.4.特别方法
11.标准输入流(Sstem.in)
11.1.本质
本质上是一个字节流,可以获取键盘录入的数据.
11.1.构造方法
a.InputStreamReader isr = new InputStreamReader(System.in); 可以将字节流通过转换流转换为一个字符流.
b.BufferedReader br = new BufferedReader(isr); 使用字符缓冲输入流包装了字符流,获得了更强大的功能,readLine();
注:自己封装标准输入流过程比较繁琐,所以Java提供了一个类Scanner.
12.标准输出流(System.out)
12.1.本质
本质也是一个字节流.
12.2.println/print的区别
a.println()可以没有参数,如果没有参数的话,表示换行,如果有参数的话,表示将参数打印到控制台,然后换行.
b.print()必须有参数,将参数打印到控制台.
13.字节打印流(PrintStream)
13.1.构造方法
a.PrintStream ps = new PrintStream(String pathName)
b.PrintStream ps = new PrintStream(File file)
13.2.常用方法
a.println/print
13.3.注意
字节流是不需要刷新的.
14.字符打印流(PrintWriter)
14.1.构造方法
a.PrintWriter pw = new PrintWriter(String pathName/File file)
b.PrintWriter pw = new PrintWriter(new FileWriter(String pathName/File file),true); 在调用println/printf/format这三个方法的时候才自动刷新.
14.2.常用方法
a.println/print
println()实际上包含了三个操作:
1.将数据打印到文件.
2.换行.
3.刷新
14.3.注意
1.PrintWrite本身没有自动刷新的功能,都是依靠构造方法传入的字符流才可以自动刷新.
2.想要自动刷新,必须给出第二个参数为true.
15.序列化流(ObjectOutputStream)
15.1.构造方法
a.ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(String pathName/File file));
15.2.常用方法
a.writeObject(Object o); -> 将一个对象序列化到文件中.
15.3.注意
1.要序列化的对象所在的类必须实现序列化接口Serializable(标记接口)
2.可以调用多次writeObject()方法将多个对象存储到文件中,不好.但是读取的时候读取到文件末尾的时候会出异常.
3.希望就写一个对象到文件中,如果非要将多个对象写入到文件中,那么可以将多个对象放到集合中,将集合写入到文件中.
4.当一个类实现了序列化接口的时候,[强制]给出一个序列化Id
private static final long serialVersionUID = 1L;
16.反序列化流(ObjectInputStream)
16.1.构造方法
a.ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(String pathName/File file));
16.2.常用方法
a.readObject();
b.调用一次readObject()方法就会读取文件中一个对象.
16.3.注意
如果创建了一个反序列化流,指向的文件中并没有任何的序列化数据,那么即便没有调用readObject方法也会出现异常.
呼~终于写完啦 下一篇我们来介绍IO流的具体案例 三连三连 加油加油
这篇关于Java基础IO流(知识体系详解)【五】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28MQ底层原理资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:入门与初级用户指南
- 2024-11-28MQ消息队列资料入门教程
- 2024-11-28MQ消息队列资料:新手入门详解
- 2024-11-28MQ消息中间件资料详解与应用教程
- 2024-11-28MQ消息中间件资料入门教程
- 2024-11-28MQ源码资料详解与入门教程
- 2024-11-28MQ源码资料入门教程
- 2024-11-28RocketMQ底层原理资料详解