Java基础——IO

一、IO流概念

1、IO流用来处理设备之间的数据传输

2、Java对数据的操作是通过流的方式

3、Java用于操作流的对象都在IO包中

4、流按流向分为两种:输入流,输出流。

5、流按操作类型分为两种:字节流与字符流。字节流可以操作任何数据,字符流只能操作纯字符数据,比较方         便。

二、IO流常用基类

1、字节流的抽象基类:

  InputStream ,OutputStream

2、字符流的抽象基类:

   Reader , Writer

3、由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

  如:InputStream的子类FileInputStream。  

   如:Reader的子类FileReader。

注意: InputStreamReader 是字符流, 可以从字节流中读取字符

三、IO程序书写

 使用前,导入IO包中的类

 使用时,进行IO异常处理

 使用后,释放资源

四、字符流读写文件

1、读取文件

 a、定义字符流关联指定文件

FileReader reader = new FileReader("Test.txt");

 b、读取一个字符,返回int,该字符的码表值

int ch = reader.read();

 c、关闭流,释放资源

reader.close();

2、写出文件

 a、定义字符输出流关联指定文件

FileWriter writer = new FileWriter("Test.txt");

 b、写出一个字符,接收int码表值

writer.write(97);

 c、关闭流,释放资源

writer.close();

3、注意事项

 a、文件路径

定义文件路径时Windows中的目录符号为“\”,但这个符号在Java中是特殊字符,需要转义。

可以用“\\”或“/”表示。

 b、读取文件

读取文件时必须保证文件存在,否则将抛出FileNotFoundException。

 c、写出文件

写出时文件如不存在时程序会创建新文件,如文件已存在则会清空原文件内容重新写入。

如需追加内容可调用FileWriter构造函数FileWriter(String fileName, boolean append)

五、字符流缓冲区读写

1、自定义缓冲区读写

 a、为什么定义缓冲区

由于单个字符读写需要频繁操作文件,所以效率非常低。

我们可以定义缓冲区将要读取或写出的数据缓存,减少操作文件次数。

 b、缓冲区读取

先定义一个数组,然后调用FileReader读取一个数组的方法。

int read(char[] cbuf)

 c、缓冲区写出

将要写出的数据存放在数组中,调用FileWriter方法,一次写出一个数组。

void write(char[] cbuf, int off, int len)

2、内置缓冲区的BufferedReader和BufferedWriter

 a、Java提供了带缓冲功能的Reader和Writer类:BufferedReader,BufferedWriter

 b、这两个类都是提供包装功能,需要提供其他流来使用,给其他流增加缓冲功能

 c、当我们调用BufferedReader读取数据时,程序会从文件中一次读取8192个字符用来缓冲

 d、当我们调用BufferedWriter写出数据时,程序会先将数据写出到缓冲数组,直到写满8192个才一次性刷出到文件

六、装饰设计模式(Decorator)

1、什么情况下使用装饰设计模式

   当我们需要对一个类的功能进行改进、增强的时候。

2、装饰模式的基本格式。

   a、含有被装饰类的引用

   b、通过构造函数传入被装饰类对象

   c、和被装饰类含有同样的方法,其中调用被装饰类的方法,对其进行改进、增强

   d、和被装饰类继承同一个类或实现同一个接口,可以当做被装饰类来使用

3、了解BufferedReader、BufferedWriter的原理。

BufferedReader、BufferedWriter都是装饰类,他们可以装饰一个Reader或Writer,给被装饰的Reader和Writer提供缓冲的功能。

就像我们用BufferedReader、BufferedWriter装饰FileReader和FileWriter,使用的读写功能还是FileReader和FileWriter的,但给这两个类的读写添加了缓冲功能。

七、字节流

  1、基本操作与字符流相同

  2、字节流可以操作任意类型数据

八、字节流缓冲区读写

1、自定义缓冲区读写

  a、原理和字符流相同,都是为了提高效率

  b、定义数组缓冲数据,一次读取一个数组,一次写出一个数组,减少操作文件的次数

2、BufferedInputStream、BufferedOutputStream

 a、和BufferedReader、BufferedWriter原理相同,都是包装类

 b、BufferedInputStream、BufferedOutputStream包装InputStream和OutputStream提供缓冲功能

九、转换流

1、字符流与字节流之间的桥梁

2、方便了字符流与字节流之间的操作

3、字节流中的数据都是字符时,转成字符流操作更高效

十、标准输入输出流

1、System类中的成员变量:in,out。

2、它们各代表了系统标准的输入和输出设备。

3、默认输入设备是键盘,输出设备是显示器。

4、System.in的类型是InputStream.

5、System.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类.

十一、流基本应用小结

总结:在边学的时候,边写代码练习,很快就熟练了。经常同样的代码反复的敲几遍,温故而知新。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值