字符流—FileWriter

字符流主要是在IO流中运用到,为什么会写字符流技点呢?那是因为写到字符流和字节流就会想到IO流,在写字符流和字节流之前我们首先就要先认识IO流,我们知道什么是IO流码?其实IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象描述为流。
为什么会叫做IO流而不是叫其他的流的呢?其实IO流是输入(InputStream)和输出(OutputStream)两个的首字母组合成的,简称:IO流。
流的分类有几大种:

  1. 输出流和输入流
    输入流和输出流相对于内存设备而言
    将外设中的数据读取到内存中:输入
    将内存的数写入到外设中:输出
  2. 字节流和字符流;
    由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字,在对这个文字进行操作。简单来说:字节流+编码表
    字节流的两个顶层父类:1.InputStream 2.OutputStream
    字符流的两个顶层父类:1.Reader 2.Writer
    BufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriter 这些体系的子类都以父类名作为后缀。而且子类名的前缀就是该对象的功能。
  3. 节点流和处理流
    按照流的角色类分,可以分为节点流和处理流。
    节点流:可以从向一个特定的IO设备(如磁盘,网络)读/写数据的流。也被称为低级流。
    处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。也称为高级流
    下面是一个普通的例子:
    思路:需求:将一些文字存储到硬盘一个文件中。记住如果要操作文字数据,建议优先考虑字符流。而且要将数据从内存写到硬盘上要使用字符流中的输出流,Writer。硬盘的数据基本体现是文件,找到一个操作文件的Writer
    //创建一个可以往文件中写入字符数据的字符输出流对象
    在这里插入图片描述
    既然是往一个文件中写入文字数据,那么在创建对象时就必须明确该文件(用于存储数据的目的地)。如果文件不存在则会自动创建,如果文件存在,则会被覆盖
    如下演示图:
    第一种的自动创建:
    在这里插入图片描述
    图1
    图1是在Myeclipse中创建的是,文本中是没有任何数据的。
    下面我将进行第二种:覆盖,我在图1中的文本天数据,看一下会是怎么样的。
    在这里插入图片描述
    图2添加好数据
    一旦你在Myeclipse中在执行了一遍,你再到文件夹中找到文本,打开文本依旧没有数据的,直接会变成图1一样没有任何的数据的空白文本。为什么数据会没有呢?其实文件已经被覆盖了,在同一个代码中再执行一次文本里面的数据就会被覆盖。其实什么叫覆盖呢?覆盖就是判断一下它,有没有这个东西,有的话就干掉它再运行一遍。没有的话就自动创建。
    下面一段代码其实就是调用Writer对象中的writer(string)方法,写入数据。
    在这里插入图片描述
    图3
    执行效果还是空文本,为什么又会是空文本呢?我不是已经把数据写上了吗?难道没保存,其实不是的,其实数据写入到了 临时存储缓冲区中。
    在这里插入图片描述
    图4
    所以我们最主要的是进行刷新一下,将数据直接写到目的地中。然后我们再把文件夹中的demo.txt文本删掉,再Myeclipse中重新执行一遍。数据就会在文本中显示出来。如下图效果:
    在这里插入图片描述
    图5
    接下来我们进行关闭流,在关闭此流之前我们要先刷新它,再调用flush()刷新缓冲中的数据到目的地。将导致抛出异常IOException,它告诉我们流已经结束了,流都没有了写了数据也是没用的。如下图6所示
    在这里插入图片描述
    图6
    接下来要实现的一个功能是,我要在文本中实现第一行是“abcd”第二行是“hahaha”在原来代码图3的情况下加上LINE_SEPARATOR然后会出现错误,把鼠标移到LINE_SEPARATOR它的下面,你会有很多错误出现,你点击第一条它就是拿系统的代码,图7.2就是它系统的代码。我进行更改了。
    在这里插入图片描述
    图7.1
    在这里插入图片描述
    图7.2
    运行出来的效果就是如下所示
    在这里插入图片描述
    总结,其实我上面写的都是一些很基础的东西,并不是很多的难点,难点都是在基础的情况下慢慢延伸出来的,比如说我们是不是可以用try…catch输出啊捕获一下异常等,都是我们需要去延伸和挖掘的。我没有写这些是因为我觉得我应该了解更多的一些基础,那样我才会知道其他的一些难点是从哪里出来的,并不会说毫无头绪。并且有多流的方法就是很相似的,其实OutputStream和Writer是所有输出流的基类,它们的方法也是非常类似的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值