Java基础--IO流(一)

<span style="font-size:12px;">------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------</span>

IO流概述
1.IO流:Input Output流  或者数据流
        (1)IO流用来处理设备间的数据传输。
        (2)Java对数据的操作是通过流的方式。
        (3)Java用于操作流的对象都在IO包中。
        (4)流按操作数据分为两种:字节流和字符流。
        (5)流按流向分为:输入流和输出流。
注意:流只能操作数据,而不能操作文件。
补充:码表
        (1)ASCII码表:每个字符都对应键盘上的一个键,只有enter键对应两个字符(\r\n),每个字符占1个字节
        (2)gb2312码表:英文占1个字节(正数),汉字占两个字节(负数)
        (3)gbk码表: 英文占1个字节(正数),汉字占两个字节(第一个是负数,第二个可正可负)
        (4)unicode码表:所有字符都占两个字节,前两个字节位特征码
        (5)UTF-8码表: 每个字符占1~3个字节,英文占1个,汉字占3个,前三个为特征码
2.IO流的常用基类:
        (1)字节流的抽象基流:InputStream和OutputStream
        (2)字符流的抽象基流:Reader和Writer
注:此四个类派生出来的子类名称都是以父类名作为子类名的后缀,以前缀为其功能;如InputStream子类FileInputStream;Reader子类FileReader

字符流
1:字符流的读写
实例:在硬盘上,创建一个文件并写入一些文字数据。
思路:找到一个专门用于操作文件的Writer子类对象。FileWriter。  后缀名是父类名。 前缀名是该流对象的功能。
写入字符流步骤
(1)创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其实该步就是在明确数据要存放的目的地。
FileWriter fw = new FileWriter("demo.txt");
        (2)调用write(String s)方法,将字符串写入到流中。
             fw.write("abcde");
        (3)调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
             fw.flush();
        (4)调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。
              fw.close();


close()和flush()区别:
        flush()刷新后,流可以继续使用;而close()刷新后,将会关闭流,不可再写入字符流。
注意:
        (1)java自身不能写入数据,是调用系统内部方式完成数据的xieru ,使用系统资源后,一定要关闭资源。
        (2)续写构造函数:FileWriter(Strings,boolean append),在创建对象时,传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
(windows系统中的文件内换行用\r\n两个转义字符表示,在linux系统中只用\n表示换行,EditPlus软件既支持\r又支持\r\n)
        (3)在关闭fw.close(),的时候一定要进行判断fw是否为空。
实例:day18\FileWriterDemo2.java

2.读取字符流步骤
        (1)创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件已经存在,若不存在,将会发生异常FileNotFoundException。 
             FileNotFoundException属于IOException的子类异常.
             FileReader fr = new FileReader("demo.txt");
        (2)调用读取流对象的read()方法。读取的字符,如果已到达流的末尾,则返回 -1。windows系统在每个文件结尾处有一个结束标识,在java不返回这个标识,而返回-1作为文件结尾
             read():一次读一个字符,且会继续往下读。
             第一种方式:读取单个字符。
             int ch = 0;
             while((ch=fr.read())!=-1){...}
             第二种方式:通过字符数组进行读取。
             char[] buf = new char[1024];  //2k个字节,一个字符两个字节
i             nt num = 0;
             while((num=fr.read(buf))!=-1){...}
这两个方法的区别如图所示:

        (3)读取后要调用close方法将流资源关闭。

注:读取的时候不需要刷新,直接读取数据

实例:将C盘一个文本文件复制到D盘。代码:day18\CopyText.java
复制的原理:
其实就是将C盘下的文件数据存储到D盘的一个文件中。
步骤:
( 1) 在D盘创建一个文件。用于存储C盘文件中的数据。
(2) 定义读取流和C盘文件关联。
(3) 通过不断的读写完成数据存储。
( 4) 关闭资源。
如图所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值