1. File 类介绍

    File 类封装了对用户机器的文件系统进行操作的功能。例如,可以用 File 类获得文件上次修改的时间,移动,或者对文件进行删除、重命名。换句话说,流类关注的是文件内容,而 File 类关注的是文件在磁盘上的存储。主要方法有lastModified(),getName(),getCanonicalFileified(),isDerector(),isFile(),getPath() 等;

  2. FileInputStream 类

    以字节为单位的流处理。字节序列:二进制数据。与编码无关,不存在乱码问题。主要方法有read(),read(byte[] b),read(byte[],int off,int len),available()

    File 类与 FileInputStream 类的区别:

    流类关注的是文件内容,而 File 类关注的是文件在磁盘上的存储.File 不属于文件流 , 只能代表一个文件或是目录的路径名而已.FileInputStream的构造函数,可以为File对象,或者该File的String地址

  3. InputStreamReader 类

    以文本格式输入 / 输出,可以指定编码格式,构造函数参数为inputstream和编码格式;主要方法: getEncoding (),read();

  4. FileReader 类

    把文件转换为字符流读入,InputStreamReader 类的子类,所有方法(read ()等)都从父类 InputStreamReader 中继承来;与 InputStreamReader 类的区别:主要不同在于构造函数!

    FileInputStream类与 FileReader类的区别:

    两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String 。区别在于:Reader类及其子类提供的字符流的读取char,char[],inputStream及其子类提供字节流的读取byte,byte[];

    InputStreamReader可以将stream转换成reader方式,是reader和stream之间的桥梁,如果要指定编码格式,则只能用InputStreamReader

    不指定编码时如下

  5. 1
    2
    3
    4
    5
    6
    7
    FileReader fr = new FileReader("ming.txt");   
    char[] buffer = new char[1024];   
    int ch = 0;   
    while((ch = fr.read())!=-1 )   
    {   
        System.out.print((char)ch);   
    }

    指定编码时如下

  6. 1
    2
    3
    4
    5
    InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));   
    while((ch = isr.read())!=-1)   
    {   
        System.out.print((char)ch);   
    }

  7. BufferedReader 类

    BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReader是针对Reader的,不直接针对文件,也不是只针对文件读取。

  8. 1
    2
    3
    4
    5
    6
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));   
    String data = null;   
    while((data = br.readLine())!=null)   
    {   
        System.out.println(data);   
    }

总结以上内容,得出比较好的规范用法:

1.

1
2
3
4
File file = new File ("hello.txt");   
FileInputStream in=new FileInputStream(file);   
InputStreamReader inReader=new InputStreamReader(in);   
BufferedReader bufReader=new BufferedReader(inReader);

2.

1
2
3
4
FileInputStream in=null;   
File file = new File ("hello.txt");   
in=new FileInputStream(file);   
BufferedReader bufReader=new BufferedReader(new InputStreamReader(in));

3.

1
2
File file = new File ("hello.txt");   
BufferedReader bufReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));

上述三种写法其实都一样,仅有的微小区别:

a)第二种方式中把“FileInputStream in=null;”定义单独放在开始处,说明下面应该还有要用到in对象变量的地方;(BufferedReader处用了)

b)第二种方式没有定义InputStreamReader的对象变量,直接在BufferedReader的构造函数中new一个,这种方式与第一种方式的主要区别:InputStreamReader对象只使用一次!这对于在这里只需要使用一次这个InputStreamReader对象的应用来说更好;无需定义InputStreamReader的对象变量,接收由new返回的该对象的引用,因为下面的程序中不需要这个InputStreamReader的对象变量,所以无需定义;所以这种情况下,第二种方式比第一种更好一些。

c)第三种方式中,典型的三层嵌套委派关系,清晰看出Reader的委派模式(《corejava》12章有图描述该委派关系),FileInputStream和InputStreamReader都没有定义变量,new生成的对象都只是使用一次。

d)三种方式的区别也就在于FileInputStream和InputStreamReader对象是否都只使用一次,是否需要定义它们的对象变量,以及个人的编码习惯。

e)但是要注意异常处理,FileInputStream(file)会抛出NotFileFoundException,如果采用surround方式(try&catch)处理,应该用第二种方式,这样可以用System.out.println提示文件未找到;当然在函数名后使用throws Exception,然后用第三种方式也行,但似乎这适合有用户界面的情况,把异常抛出在客户端在处理。

写文件的方式和读文件差不多也差不多,类就不介绍了,仅贴出代码,

1
2
3
4
5
6
 String sql="sdfsdf";
 FileOutputStream fileOutputStream = new FileOutputStream("d:/test/cell1.txt"); 
 OutputStreamWriter oWriter = new OutputStreamWriter(fileOutputStream);
 BufferedWriter bw = new BufferedWriter(oWriter);
 bw.write(sql);
 bw.flush();

记住,最后的BufferedWriter 一定要记得flush才能写入文件

读取文件,大概就这样子了。

终于觉得自己也理清楚了,

本文转自布拉君君 51CTO博客,原文链接:http://blog.51cto.com/5148737/1754150,如需转载请自行联系原作者

File,FileInputStream,FileReader,InputStreamReader,BufferReader 的区别使用相关推荐

  1. java filereader blob_二进制学习——Blob,ArrayBuffer、File、FileReader和FormData的区别

    前言: Blob.ArrayBuffer.File.fileReader.formData这些名词总是经常看到,知道一点又好像不知道,像是同一个东西好像又不是,总是模模糊糊,最近终于下决心要弄清楚. ...

  2. InputStream Reader FileInputStream BufferedReader InputStreamReader FileReader FileInputStream和转换流

    原文地址,转发备忘 https://blog.csdn.net/liu940204/article/details/79994467 ava.io下面有两个抽象类:InputStream和Reader ...

  3. Java FileReader InputStreamReader类源码解析

    FileReader 前面介绍FileInputStream的时候提到过,它是从文件读取字节,如果要从文件读取字符的话可以使用FileReader.FileReader是可以便利读取字符文件的类,构造 ...

  4. JAVA读文件类之FileReader/InputStreamReader/BufferedReader

    上一篇写了Java写入文件操作,这一篇回顾一下Java读文件操作. Java IO采用reader类来进行文件读取,而且已经提供了三个Reader的实现类,FileReader,InputStream ...

  5. Java File相关源码分析:File、FileInputStream、InputStreamReader

    该源码适用于windows环境下 最近做了个小系统,用到了File相关的类,如下: <span style="font-size:14px;">InputStreamR ...

  6. InputStream 、 InputStreamReader 、 BufferedReader区别

    区别介绍: 1.InputStream.OutputStream 处理字节流的抽象类 InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等. O ...

  7. 浅谈FIle协议与Http协议及区别

    背景 先看三段代码: index.html: <!DOCTYPE html> <html lang="en"> <head><meta c ...

  8. FileInputStream与BufferedInputStream有哪些区别?

    文章目录 前言 一.FileInputStream(文件输入流) 1.逐个字节读取: 2.批量字节读取: 二.BufferedInputStream(缓冲输入流) 前言 InputStream(字节输 ...

  9. File类createNewFile与createTempFile的区别

    自:http://www.cnblogs.com/huangyibo/p/3667714.html 最近,在看代码时看到了一个方法, File.createTempFile() ,由此联想到File. ...

最新文章

  1. java之static关键词的作用
  2. redis数据类型list总结
  3. c#中hook的初次尝试
  4. src与href区别
  5. [GCN+FocalLoss] 从数据角度分析实验 of Semi-supervised classification with graph convolutional networks
  6. 编写Windows服务疑问2:探索服务与安装器的关系
  7. 用 Python 打造属于自己的GUI图形化界面
  8. Ubuntu桌面远程工具
  9. 基于OpenCV视频帧差分的身高检测
  10. mysql etimedout_ETIMEDOUT
  11. 生成自己的自签名证书
  12. 企业或个人域名备案怎么弄
  13. 推荐几个2020年最实用的网站!
  14. 工业机器人编程调试怎么学
  15. 华为分布式文件存储服务器配置,分布式存储服务器
  16. 51单片机——交通灯
  17. checkra1n u盘越狱 linux,苹果实用技巧:Windows通过使用Linux U盘进行checkra1n越狱教程...
  18. 免费链接投票作品投票通道线上投票活动制作网络投票制作
  19. [MemTest太慢? 来试试这个压力更大吧!]分享一个快速测试内存超频出错的软件-TM5(和国外大佬的极限自定义配置)
  20. 使用VIVADO中的MIG控制DDR3(AXI接口)四——MIG配置及DDR3读写测试

热门文章

  1. android okhttp使用cookie请求
  2. OpenCV使用pthread实现多线程加速处理图像(C++)
  3. 动态规划—01背包问题
  4. 回文字符串—回文子串—中心扩散法
  5. 为RecyclerView添加下拉刷新(PullToRefresh)功能
  6. 使用ajax+php+mysql实现数据库定时刷新
  7. throttle_classes 60秒访问10次限制
  8. Django的静态资源
  9. 鼠标滚轮事件绑定的兼容性问题
  10. 一道超级复杂的js题目