总结IO流(个人版)

总结IO流(个人版),第1张

总结IO流(个人版)

仅供自己复习回顾使用

先记住,无论使用何种方法输入输出文件,一定要最后关闭文件

Io流不难但是东西多。

文件中的内容-->java程序       输入流

java程序----->文件中         输出流

进行输入输出内容时,有两种方式,一种是以字节的方式进行读取,一种是以字符的方式进行读取。  两者的区别是:如果用字节流的方式进行读取,它是以每个字节为单位,当然这样的效率肯定慢,以字符读取的的方式,效率快,但是对于那些声音、文本文件这些二进制文件如果使用字符读取,可能会发生解析失败。所以总的来说,对于纯文本文件,用字符的读取方式,如果是二进制文件(声音、视频文件),用字节的方式读取。

字节读取方式:父类(抽象类):InputStream   输入流               OutputStream:  输出流 

字符读取方式:父类:     Reader (读入程序)                     Writer(写到文件中)      

  父类是抽象类,不能直接使用。使用字节输入输出时,对应的是FileInputStream 和FileOutputStream

一、基本流二

1.以字节形式读

①FileInputStream

在进行,文件向java程序输入文件时,用FileInputStream效率是在太低,这个FileInputStream对象在read时,可以是向一个数组中读,所以可以提前new一个字节数组,定义的字节数组多大,相当于它一次性可以读多少个字节,提升了效率。

 ②FileOutputStream   字节形式向文件中输出内容

 2、以字符形式读写

FileReader          FileWriter

 

与字节读写大同小异,都是一个套路,看看代码吧

二、处理流(对上诉所说的基本流进行了封装)

处理流就是类,有BufferedImputStream、BufferedOutputStream、BufferedWriter、BufferedRead

这个类就是修饰者模式,意思是,BufferedImputStream、BufferedOutputStream、BufferedWriter、BufferedRead这几个类内部有对应的ImputStream、OutputStreamWriter、Read抽象类属性,所以它们是可以处理对应的子类的方法,他的还出就是,而且还处于构造方方法的使用方式,就是多态

例如,拿BufferedWriter举例,只需定义了那么他的构造函数是可以,里边参数可以是FileWriter、CharArrayWriter、PipeWriter,根据动态绑定,可以完成不同的 *** 作,

 

都是大同小异,原理都一样

三、 对象流(就是实现了序列化和反序列化),前一篇文章已经写了,就不多赘述了

四、标准输入输出流

                                                       类型                                             默认设备

System.in 标准输入                 InputStream                                   键盘

      编译类型是InputStream             运行类型是BufferedInputStream

System.out 标准输出                  PrintStream                                  显示器            

编译类型  PrintStream             运行类型  PrintStream

五、转换流(属于字符输入输出)

目的是使参数字节流转换为字符流,而且主要解决的问题是字符编码问题

关于字符编码问题,例如,我们用记事本写的文档,默认是UTF-8模式,用在读的时候是可以正常读入读出的,但是,如果记事本的保存格式为

 这些其他的格式,如果还用以前的方法读取的话,读出来的文件是乱码的,所以InputStreamReader和OutputStreamWriter就解决了这个问题,参数是FileInputStream或FileOutputStream,但是读写的时候,依旧是要用BufferedWriter和BufferedReader,作为它们的参数,,这样来说,就像是InputStreamReader包装了FileInputStream,而BufferedReader又包装了

InputStreamReader。。前面我们讲过了BufferedReader,这个构造函数里边的参数是可以传任何实现了Reader的子类。话不多说,上代码

InputStreamReader:

 OutputStreamWriter:

 六、打印流  

(printStream   printWriter)以字节打印,以字符打印

看名字就知道,打印流只有输出流,没有输入流

字符流打印

 字节流打印

 看看代码还是好理解的,如果要指定位置输出,就在构造方法里,传入Writer的实现子类,带有输出的地址

七、proverity(文件集合)

举例:当有一个数据库文件,里边有属性,name=zhangsan  age=18  pwd=123456 等等

按之前学的。我们当然可以将这个文件读入java程序,但是,如果我们只想要值呢,或者只要age,这样就很麻烦了,proverity文件集合就解决了这个麻烦

他的方法有①load:加载配置文件的键值对到Properties对象

②list:将数据显示到指定设备

③getProperty(key):根据键获得值

④setProperty(key,value):设置键值对到Properity对象

⑤store:将Property中的键值对存储到配置文件

注意事项:用Properties对象调用load方法时,里边的参数可以是new FileReader,或者是

new FileInputStream,一个是以字节流,或者字符

 

当调用store方法时,也是可以传两种,

new FileWriter()或new FileOutputStream,,一定要注意,如果传的是第二种以字节的方式,如果我们要向配置文件中传值的时候,如果键或值是汉字,对应到配置文件中就是这个汉字对应的unicode值,而不是真正的汉字。用new FileWriter()即使是汉字也没事,因为本身即是字符串传输

 

 暂时就知道这几个,学的多了在补充别的

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5611746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存