Java 基础五 IO、字节流、字符流、属性集、缓冲流、转换流




 

字节流 ------------读取时,没有内容,返回-1

OutputStrean   -----   write   ------    输出流
InputStrean      -----   read   -------    输入流

 

字节输出流(OutputString ----  超类 )






FileOutputStrean(数据由内存 ----> 硬盘)--------------------------write


字节输出流写入到文件

字节输出流使用步骤 


文件存储原理

一次写多个字节的方法


        



-------------------------------------------------------


-------------------------------------------------------


Arrays.toString(bytes2)

UTF-8中3个字节代表一个中文,GBK中2个字节代表一个中文

追加写和续写

追加写(在此执行,不会被覆盖)

追加写的开关-------true
多次执行,不会覆盖,会在文件后,继续添加

写换行( 追加 \r )

 

字节输入流(InputString --- 超类)

FileInputString(硬盘 ---> 内存)文件字节输入流--------------read    文件为空,读取-1

int   read()-----字节输入流从文件中读取-----读一次指针后移

字节输入流使用步骤:




读一次后,指针向后移动,只需在赌一次就可以读后面内容



如果文件指针所指为空,返回-1

一次读取全部字节流的方法
                                              
-------使用循环调用read()--------读取下一个字节,指针后移


                    转换为字符

注意事项:

不能这么写,没调用一次read(),指针就后移,读不全
必须设置int len 接收read()的值
 

一次读取一个字节-----读取原理

int   read(byte[ ] b)-------从输入流中读取一定数量的字节,存入缓冲区数组b

从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
如果因为已经到达文件末尾而没有更多的数据,则返回 -1


int - 每次读的个数,byte[] 缓冲--1024(1kb)

通过String( byte [ ] bytes )、String( byte [ ] bytes ,int offset, int length) 构造方法------------------字符数组变字符串


一次读取多个字节----原理


文件的复制 (变读变写)(循环读写-缓冲数组)

一次读一个字节,速度太慢

优化:
使用缓冲数组扩大一次读写的字节数【1024】,提高速度


OutputStrean   -----   write   ------    输出流
InputStrean      -----   read   -------    输入流

 

字符流---------------读取时,没有内容,返回null

字符输入流(Reader)-------超类



 

FileReader    --------    字符输入流




使用步骤:

读取一次  ---  字符输入流

读取多次 --- 字符输入流


 

字符输出流(Writer)-------超类 ---flush()



FileWriter    --------    字符输出流

使用步骤:(重点)

write只把内容写入缓冲区,不使用 flush , 内容就不会写入


不flush ,直接close,内容也会写入

 

flush 和 close 方法的区别 (flush 刷新内容,close 关闭流并刷新内容)


字符输出流写数据的其他方法

writer ( char [ ]  cbuf )

 


续写和换行

 

IO异常处理


1、整体创建流,调用方法,都方法try....catch中,
2、close放在finally中,需要专门try.....catch一次
3、文件输出流对象,需要定义成成员变量,并赋初值null(在try.....catch外)否则finally中的close无法调用
4、 finally中,需判断输出流对象创建成功否,判断对象值是否为null


      

JDK7和JDK9 流中的异常处理

JDK7 --------------- 在  try  后增加() 放入定义流对象,则作用于就为该括号内,执行完自动释放


        

JDK9 -----------------在try后增加() 直接放入流对象名称(变量名)对象的创建在外边


           

 

属性集

Properties (双列集合)



方法  store ( )
方法  load ( )

使用Properties集合存储数据,遍历

Object    setProperties(String key, String value)      调用Hashtable 的方法puts ,向集合中添加数据
String     getProperties(String key)              相当于Map集合的get(key)方法,通过key找到value值

store()


void store (OutputStrean out,String comments)
void store (Writer writer,String comments)

OutputStrean  out:   字节输出流
Writer  writer:   字符输出流
String comments: 注释---说明文件是做什么的----不能中文----一般“”空字符串
 







字节输出流不能写入中文,乱码

load()



注意:字节输入/输出流InputStrean/OutStrean 不能读写中文

 

缓冲流    (是输入输出流的子类)




字节缓冲流---------flush()---将内存缓冲区的数据,刷新到文件

构造方法

BufferedOutputStrean(内部缓冲区---字节数组byte[])(字节同样不能读写汉字)





使用步骤:

BufferedInputStrean(内部缓冲区---字节数组byte[])(字节同样不能读写汉字)



使用步骤:

     一次读一个字节

     

     使用缓冲数组

    

使用缓冲区+缓冲数组读写效率加快

字符缓冲流

BufferedWriter   ----flush() 将内存缓冲区的数据,刷新到文件





使用步骤:

缓冲字符输出流----换行--------------------------bw.newline()

                                                                           println方法  

BufferedReader




readLine()读一个文本行

使用步骤:



文本排序

转换流---------OutputStreanWriter/InputStreanReader

字符编码

 



                       



          
          


          兼容ASCII码表
          

          
          


          
          
              

编码引出的问题

IDEA中使用FileReader默认使用UTF-8,Windows系统,默认GBK,当读取Windows文件时,会乱码


OutputStreanWriter类-------写入指定编码格式的文件

OutputStreanWriter是FileWriter的父类




使用步骤:



注意,此时,使用IDE打开还是乱码,因为IDE默认UTF-8,应该在windows下用用GBK方式打开

InputStreanReader类------读取指定编码格式的文件

InputStreanReader是FileReader的父类 




使用步骤:



 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值