黑马程序员技术交流社区
标题:
IO流中的问题!
[打印本页]
作者:
王舒玮
时间:
2012-11-29 21:36
标题:
IO流中的问题!
求解:IO流中的FileWriter和FileReader的写入和读取数据,
BufferedWriter和BufferedReader的写入和读取数据中的程序分别什么时候用void flush()方法?
比较乱!
作者:
黑马-王宁
时间:
2012-11-29 22:11
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();
}
}
作者:
程宏志
时间:
2012-11-29 22:56
flush()的方法用在的是写入的时候及输出流的时候,及是FielWriter()和BufferedWriter()之中,而读及是输入流就不需要使用,容易混淆的话,你可以这样的理解,数据的输入和输出过程是有一个容器,这个容器就是缓冲区,流程是先将数据读到缓冲区中,然后再将缓冲区中的数据写到硬盘上的某一个地方;那么缓冲区在输出数据时,每次都应该刷新一次,将里面的数据刷走,那这里,就是使用了flus()你可以把这个方法理解为刷新的意思,就是刷走缓冲区中的数据,以便继续读取数据!
打个比方吧:一个杯子中有一杯水,但是冷了,然后你想喝热水,这时你就得把冷水倒掉,然后再去接热水,那么你打掉杯中冷水的这个动作就是一种刷新的动作,就相当于你使用了flush()这种方法!然后再去接热水!我想这样解释你应该明白了吧!
作者:
王舒玮
时间:
2012-11-29 23:51
程宏志 发表于 2012-11-29 22:56
flush()的方法用在的是写入的时候及输出流的时候,及是FielWriter()和BufferedWriter()之中,而读及 ...
太感谢了 困扰我一晚上了 3Q3Q~
作者:
梁胜海
时间:
2012-11-30 13:03
一句话,FIleWriter和OutputStream都要flush。只要你要学数据都要flush。不过你close了就不要flush。但循环写入,循环内必须要写flush
作者:
梁胜海
时间:
2012-11-30 13:05
写,一个字打错了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2