黑马程序员——对io流的flush与close方法的理解
2014-12-15 15:42
387 查看
之前看了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方法只有输出流才具备的,而输入流是没有这个方法的
比如我用缓冲流来复制文件
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方法只有输出流才具备的,而输入流是没有这个方法的
相关文章推荐
- 为什么部分IO流在调用Close()方法之前要先调用flush()方法
- IO流中flush()和close()方法的区别
- IO流(4)--Flush()和Close()方法的区别
- 解密Java IO流中的flush()方法的由来
- java写文件时,输出不完整的原因以及解决方法close()或flush()
- 黑马程序员——04 高新技术(一)关于正则表达式的理解和常用方法
- 黑马程序员--IO流概述和方法应用
- 黑马程序员_java的IO流(对第十八课IO理解以及文件读取和字符写入总结)
- java写文件时,输出不完整的原因以及解决方法close()或flush()
- 深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
- 黑马程序员——java基础——IO流跟缓冲的理解
- 黑马程序员_JAVA IO流重要方法与代码示例
- 黑马程序员 关闭和释放连接 Close方法与Dispose方法
- 黑马程序员————IO流操作的基本规律和使用方法
- 黑马程序员-面向对象的理解以及Objective-C方法和对象分配内存的学习笔记
- 黑马程序员 —— BufferedOutputStream的flush()方法
- 深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
- 深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
- 黑马程序员_对绘图方法paint的一些理解
- 黑马程序员_main()方法的理解