黑马程序员——对io流的flush与close方法的理解

之前看了io流一直没懂flush()这个方法究竟干了个什么,后面才弄明白,所以把它记下来


比如我用缓冲流来复制文件

import java.io.*;
public class Test7 {



public static void main(String[] args) {
// TODO Auto-generated method stub

BufferedInputStream bis = null;//声明BufferedInputStream
BufferedOutputStream bos = null;//声明BufferedOutputStream
try {
bis = new BufferedInputStream(new FileInputStream("D:/a.txt"));//实例化BufferedInputStream
bos = new BufferedOutputStream(new FileOutputStream("E:/b.txt"));//实例化BufferedOutputStream
int b = 0;//用来读取数据
while((b = bis.read())!=-1){//判断是否到文件结尾

bos.write(b);//写入文件

}

1
} catch (FileNotFoundException e) {
System.out.println("文件不存在!");
System.exit(0);
} catch (IOException e) {
System.out.println("文件读取错误!");
System.exit(0);
}


System.out.println("文件已复制!");
}


}


我先不在1号位置写flush()或者close()方法,程序正常运行,但是运行的结果并没有把a.txt的内容复制到b.txt里面


然后我们把flush()方法加入到1这个位置


try {
bis = new BufferedInputStream(new FileInputStream("D:/a.txt"));//实例化BufferedInputStream
bos = new BufferedOutputStream(new FileOutputStream("E:/b.txt"));//实例化BufferedOutputStream
int b = 0;//用来读取数据
while((b = bis.read())!=-1){//判断是否到文件结尾

bos.write(b);//写入文件

}

bos.flush();
} catch (FileNotFoundException e) {
System.out.println("文件不存在!");
System.exit(0);
} catch (IOException e) {
System.out.println("文件读取错误!");
System.exit(0);
}

运行后成功的把a.txt的内容复制到了b.txt。



再改为close()

try {
bis = new BufferedInputStream(new FileInputStream("D:/a.txt"));//实例化BufferedInputStream
bos = new BufferedOutputStream(new FileOutputStream("E:/b.txt"));//实例化BufferedOutputStream
int b = 0;//用来读取数据
while((b = bis.read())!=-1){//判断是否到文件结尾

bos.write(b);//写入文件

}

bis.close();
} catch (FileNotFoundException e) {
System.out.println("文件不存在!");
System.exit(0);
} catch (IOException e) {
System.out.println("文件读取错误!");
System.exit(0);
}

总结:结果是一样的,这是因为调用close()这个方法的时候,close方法自动调用了flush方法,所以flush方法的作用就是为了把缓冲数据写入到文件里面去,而close方法则是将打开的流关闭掉。还有一个问题

就是flush方法只有输出流才具备的,而输入流是没有这个方法的


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值