28 Java IO操作02字节流InputStreamOutputStream和字符流ReaderWriter.docx
《28 Java IO操作02字节流InputStreamOutputStream和字符流ReaderWriter.docx》由会员分享,可在线阅读,更多相关《28 Java IO操作02字节流InputStreamOutputStream和字符流ReaderWriter.docx(11页珍藏版)》请在冰豆网上搜索。
28JavaIO操作02字节流InputStreamOutputStream和字符流ReaderWriter
28.JavaIO操作(02)
本季知识点:
字节流:
InputStream、OutputStream和字符流:
Reader、Writer。
本季详细的讲解了JAVA中字节流与字符流的基本操作,实现了向文件中写入数据的功能,之后又讲解了字节流与字符流的区别。
blog:
[零基础学JAVA]JavaSE应用部分-28.JavaIO操作(02)2009-02-25
上季内容回顾:
File类
RandomAccessFile类 --->文件读、写操作
本季主要知识点:
1、字节流:
InputStream、OutputStream
2、字符流:
Reader、Writer
字节流和字符流
InputStream和OutputStream
为什么现在非要用子类去实例化InputStream和OutputStream呢?
查JDK文档
先完成向文件中写入数据:
OutputStream定义:
publicabstractclass OutputStream
extends Object
implements Closeable, Flushable
OutputStream是一个抽象类,如果是抽象类,则肯定要用其子类进行对象的实例化。
如果要向文件中保存,则要使用FileOutputStream。
就用这两个类完成向文件中写入一个字符串的目的。
FileOutputStream构造方法:
·publicFileOutputStream(Filefile)throwsFileNotFoundException:
以File类的对象创建文件输出流
·publicFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException:
以File类的对象创建文件输出流,在最后的append参数表示的是是否在文件后面追加内容,默认是追加的。
·publicFileOutputStream(Stringname)throwsFileNotFoundException:
直接写入文件的路径,进行输出操作,实际上里面就自动包含了一个File类的对象,自动进行实例化
·publicFileOutputStream(Stringname,booleanappend)throwsFileNotFoundException
向输出流中写入内容:
publicvoidwrite(byte[]b)throwsIOException
现在要写入的内容是一个字符串,但是write方法接收的只能是一个byte数组,必须把字符串变为字符数组才可以。
以上的程序为字节的输出流,因为最终结果都是把字符串变为了byte数组了。
追加的时候就直接在后面写上一个控制的标记,内容为true:
out=newFileOutputStream(f,true);
看下效果:
现在我们灵活点哈~由外部输入
能否通过程序把在文件中的内容读进来呢?
InputStream -->字节肯定是byte数组
文件中的内容都是字节
InputStream中的方法:
把byte数组变为字符串就直接找String的构造方法。
看下效果:
因开辟byte[1024]空间,当读完文件中内容后剩余空间读不到数据就报错输出"?
"符号。
下面解决读取报错问题哈~
看下效果,现在出错的问号没有了,都换成空格了哈~
下面我们想办法将空格去掉哈~定义一个计数,计算到底一共读了多少位
看下效果:
如果直接使用InputStream类中的read()方法读取,则必须一个一个读,当文件读到底(read的返回值为-1时就表示文件读到底),则退出循环,之后用String把byte数组变为字符串输出。
使用另外一个read方法,传入一个byte数组,之后由类自动把内容赋给byte数组。
看下修改后的效果是否一样哈~
在字节流的操作中,可以发现一切都必须以byte数组为标准。
字符流:
直接支持字符的操作
Reader、Writer
使用Writer向文件中写入内容:
看下效果有没写入数据哈~
与之前的OutputStream在使用上是非常相似的,只是现在可以直接操作字符串了。
Reader的使用:
关于OutputStream与Writer及InputStream与Reader到底有那些区别呢?
·字节流是没有使用到缓冲区的,是直接操作文件的
·字符流是使用到了缓冲区,所有的内容要先放在缓冲区中,之后才能向文件中写入。
OutputStream
看下效果:
文件流最后没有关闭,内容也依然可以输出
现在把程序换成字符流,又会如何?
发现如果不关闭,则内容是无法输出的,因为内容全部都在缓冲区中,之前是因为调用了close()方法,所以会自动把缓冲区给清空掉。
可以直接使用强制性的把缓冲内容输出的操作完成。
publicabstractvoidflush()throwsIOException
看下效果:
证明字节流不使用缓冲区,字符流使用到缓冲区~~~
总结
练习题(下季讲解哈~~~)
掌握四个类的基本操作:
InputStream、OutputStream、Reader、Writer,分别的四个文件的操作子类:
FileXxx之类。
############################################
本文出自“王乾De技术博客”博客,谢绝转载!