一起因:
(0)C里面就一个File文件指针,剩下的全部通过fopen(filepaht) ,和 fread() fclose()搞定;c++提供了fstream类(fistream fostream子类)其构造方法接收string型的filepath,就可以用fstream的成员函数操作该文件的读或者写,这比c方便了许多。Java里面的就更加复杂了,据说I/O读写类就有几十个,连我们一贯熟悉的File类仅仅提供一些文件硬盘级别的基本操作(是不是文件夹,文件?创建文件,得到所有的文件夹下的文件集合等等),如何代开和读取 需要FileInputStream类来实现字节流。详见 c++ fstream + string 处理大数据(与c 的fread)
(1)以字节为导向的 stream------InputStream/OutputStream;以字符为导向的 stream Reader/Writer;
InputStreamReader 和 OutputStreamReader :把一个以字节为导向的 stream 转换成一个以字符为导向的 stream
(2) --.InputStream、OutputStream 处理字节流的抽象类二实战对比:
三种写法:
(1) File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); InputStreamReader inReader=new InputStreamReader(in); BufferedReader bufReader=new BufferedReader(inReader); (2) FileInputStream in=null; File file = new File ("hello.txt"); in=new FileInputStream(file);// 这里会抛出异常的 BufferedReader bufReader=new BufferedReader(new InputStreamReader(in)); /// 这种方法最常见了,而且规范一些,异常也可以处理 (3) File file = new File ("hello.txt"); BufferedReader bufReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
e)但是要注意异常处理,FileInputStream(file)会抛出NotFileFoundException,如果采用surround方式(try&catch)处理,应该用第二种方式,这样可以用System.out.println提示文件未找到;当然在函数名后使用throws Exception,然后用第三种方式也行,但似乎这适合有用户界面的情况,把异常抛出在客户端在处理。
总之,建议使用第二种方法。
原文:http://blog.csdn.net/u010700335/article/details/44645077