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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晓风妮子 中级黑马   /  2013-4-22 16:26  /  1643 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不明白IO流中,FileWriter中的flush和close方法有什么区别呢?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
flush是刷新缓存区,仅仅只是刷新。close就是强制的刷新一下缓存区,然后关闭你已经打开的资源。   

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
flush()刷空输出流,并输出所有被缓存的字节 ,也就是刷空内存中的数据。
           由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
close()关闭流 流操作完毕后必须关闭。
         ------关闭此流,但要先刷新它。在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。关闭以前关闭的流无效。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
FileWriter属于字符流,所以在执行写入动作的时候不会自动刷新缓存,为了提高效率,防止意外发生,比如突然断电,那么所有写在内存中的东西都白费力气了,所以,执行flush()方法,每写入一行或者多少个字节的东西就把缓冲刷新一下,将写入的东西刷新到输入文件中,而close()方法是关闭流资源,在执行该操作前会自动的刷新缓冲的写操作,flush()方法的出现是为了提高效率的,而close()方法是关闭资源的。如果使用的是字节流,那么就不会出现flush()方法了,因为字节流是实时自动刷新的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
java还提供了一些特殊的流对象
文件流                   File
打印流                   PrintStream                PrintWriter
管道流                   PipedInputStream     PipedOutputStream
序列流                   SequenceInputStream
对象序列化流           ObjectInputStream   ObjectOutputStream
(1)打印流
在整个IO包中,是输出信息最方便的流
java.io 类 PrintStream
构造方法摘要
PrintStream(File file)创建具有指定文件且不带自动行刷新的新打印流。

PrintStream(OutputStream out)创建新的打印流。

方法
void        print(String s)打印字符串。

PrintStream
printf(String format, Object... args)使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。
void        print(boolean b)打印 boolean 值。

void        print(double d)打印双精度浮点数。

(2)System类中IO
java.lang 类 System
字段摘要
static PrintStream
err “标准”错误输出流。

static InputStream
in “标准”输入流。

static PrintStream
out “标准”输出流。

(3)BufferedReader
java.io 类 BufferedReader
构造方法摘要
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。

方法
(4)String
readLine()读取一个文本行。

案例,标准的键盘输入数据
        public static void main(String[] args) throws Exception{
                BufferedReader buf=null;
                buf=new BufferedReader(new InputStreamReader(System.in));//注意转换的过程,字节流转为了字符流
                String str=null;//接受输入的内容
                System.out.println("请输入:");
                str=buf.readLine();
                System.out.println("输入的是:"+str);
        }
java.io 类 DataOutputStream
构造方法摘要
DataOutputStream(OutputStream out)创建一个新的数据输出流,将数据写入指定基础输出流。

方法
void        writeChar(int v)将一个 char 值以 2-byte 值形式写入基础输出流中,先写入高字节。

void        writeChars(String s)将字符串按字符顺序写入基础输出流。

void        writeUTF(String str)以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。

java.io 类 DataInputStream
构造方法摘要
DataInputStream(InputStream in)使用指定的基础 InputStream 创建一个 DataInputStream。

方法
char        readChar()参见 DataInput 的 readChar 方法的常规协定。

float        readFloat()参见 DataInput 的 readFloat 方法的常规协定。

String
readUTF()参见 DataInput 的 readUTF 方法的常规协定。

点评

总结的比较全,但是请针对楼主的问题扼要回答即可了,赞一个  发表于 2013-4-23 12:40

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马