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流(知识体系详解)【五】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程