A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王舒玮 中级黑马   /  2012-11-29 21:36  /  1351 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求解:IO流中的FileWriter和FileReader的写入和读取数据,
BufferedWriter和BufferedReader的写入和读取数据中的程序分别什么时候用void flush()方法?
比较乱!

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
1.写文件。向硬盘中写入数据。创建一个fileWriter对象,该对象一被初始化就必须要明确被操作的文件,而且必须确认该目录下是否有同名文件,有将覆盖。

FileWrite fw =new FileWriter(" Demo.txt"); 创建文件后,调用write方法将字符串写入到流中。

fw.write("Hello World!");运行下打开目录下得Demo文件为空,并没有写入,write方法只是把字符串写入到流中,,刷新流对象中的缓冲中的数据。将数据刷到目的地。

fw.flush();最后是关闭流资源,但是再关闭之前要刷新一次内部的缓冲中的数据。

fw.close();

现在我们可以学会了在硬盘上创建文件,如果我们还想添加内容到文件中怎么操作呢?

我们调用FileWriter的另一个构造函数FileWriter(String fileName,boolean append)

根据给定文件名以及附加的写入数据的boolean值来构造FileWriter对象,append值为true时将数据写入文件末尾处。

2.读文件

首先创建一个读取流对象,和指定名称的文件相关联,要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException。

FileReader fr=new  FileReader(Demo.txt);// 调用读取流对象的read方法,

int  ch=fr.read();    read()方法会一次读一个字符,而且会自动往下读。在读取单个字符是,在字符读到末尾时,会返回-1;抛出IOException异常发生i/o错误。

注意,只要涉及java程序和外部程序有i/o输入输出流,就一定会抛出异常。

read还有一种读取方法,就是通过字符数组进行读取。

首先定义一个字符数组,用于存储读取到的数组。返回值读到的字符个数。

FileReader fr=new  FileReader(Demo.txt);//

char[] buf= new cha[1024];

int  num =0;

while ((num=fr.read(buf))!=-1){

System.out.println(new String(bug,o,num));

}

最后做一道文本文件读取练习,读取一个java文件并打印在控制台上。

//读取一个java文件并打印在控制台上。

import java.io.*;

public class  FileRead{

        public static void main(String[] args) throws IOException

        {

               FileReader fr=new  FileReader("CalendarDemo.java");



                       char[] buf= new char[1024];



                       int  num =0;



                       while ((num=fr.read(buf))!=-1){



                       System.out.println(new String(buf,0,num));



                       }

                       fr.close();

        }
}

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
flush()的方法用在的是写入的时候及输出流的时候,及是FielWriter()和BufferedWriter()之中,而读及是输入流就不需要使用,容易混淆的话,你可以这样的理解,数据的输入和输出过程是有一个容器,这个容器就是缓冲区,流程是先将数据读到缓冲区中,然后再将缓冲区中的数据写到硬盘上的某一个地方;那么缓冲区在输出数据时,每次都应该刷新一次,将里面的数据刷走,那这里,就是使用了flus()你可以把这个方法理解为刷新的意思,就是刷走缓冲区中的数据,以便继续读取数据!
           打个比方吧:一个杯子中有一杯水,但是冷了,然后你想喝热水,这时你就得把冷水倒掉,然后再去接热水,那么你打掉杯中冷水的这个动作就是一种刷新的动作,就相当于你使用了flush()这种方法!然后再去接热水!我想这样解释你应该明白了吧!

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 呵呵 ,

查看全部评分

回复 使用道具 举报
程宏志 发表于 2012-11-29 22:56
flush()的方法用在的是写入的时候及输出流的时候,及是FielWriter()和BufferedWriter()之中,而读及 ...

太感谢了 困扰我一晚上了 3Q3Q~
回复 使用道具 举报
一句话,FIleWriter和OutputStream都要flush。只要你要学数据都要flush。不过你close了就不要flush。但循环写入,循环内必须要写flush
回复 使用道具 举报
写,一个字打错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马