这是我一般读文件用的方法BufferedReader buff = new BufferedReader(
new FileReader("They don't care about us.txt"));
String s = "";
while((s = buff.readLine()) !=null){
System.out.println(s);
}这样也行:try{
BufferedReader buff = new BufferedReader(new InputStreamReader(
new FileInputStream("They don't care about us.txt")));
String s = "";
while((s = buff.readLine()) !=null){
System.out.println(s);
}
}catch(Exception e){
e.printStackTrace();
}
我是这样认为的,FileReader可以读汉字也可以读字节,而FileInputStream只能读字节我想问的是:FileReader是否可以完全取代FileInputStream,何种情况下适合用FileInputStream.

解决方案 »

  1.   

    看你要对哪种流进行操作了,要读取原始字节流的话,FileInputStream效率比FileReader高,读取字符流的话,FileReader效率比FileInputStream高
      

  2.   

    A FileInputStream obtains input bytes from a file in a file system. What files are available depends on the host environment. FileInputStream is meant for reading streams of raw bytes such as image data. For reading streams of characters, consider using FileReader. 
      

  3.   

    如果读取数据不是字符的话,就必须用FileInputStream ,FileReader是不能完全代替FileInputStream的。
      

  4.   

    转: FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢? FileInputStream :以字节流方式读取;FileReader :把文件转换为字符流读入; InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。Reader类及其子类提供的字符流的读取char,inputStream及其子类提供字节流的读取byte,所以FileReader类是将文件按字符流的方式读取,FileInputStream则按字节流的方式读取文件;InputStreamReader可以将读如stream转换成字符流方式,是reader和stream之间的桥梁最初Java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类。FileInputStream 类以二进制输入 / 输出, I/O 速度快且效率搞,但是它的 read ()方法读到的是一个字节,很不利于人们阅读。 而 FileReader 类弥补了这个缺陷,可以以文本格式输入/ 输出,非常方便;比如可以使用 while((ch = filereader.read())!=-1 ) 循环来读取文件;可以使用BufferedReader 的 readLine() 方法一行一行的读取文本。 当我们读写文本文件的时候,采用 Reader 是非常方便的,比如 FileReader , InputStreamReader 和 BufferedReader 。其中最重要的类是 InputStreamReader ,它是字节转换为字符的桥梁。 你可以在构造器中指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等。 FileReader 与 InputStreamReader 涉及编码转换 ( 指定编码方式或者采用 os 默认编码 ) ,可能在不同的平台上出现乱码现象!而 FileInputStream 以二进制方式处理,不会出现乱码现象 . 如果处理纯文本文件,建议使用 FileReader ,因为更方便,也更适合阅读;但是要注意编码问题!其他情况(处理非纯文本文件),FileInputStream是唯一的选择;FileInputStream是进Socket通讯时会用到很多,如将文件流是Stream的方式传向服务器!
      

  5.   

    综上所述:FileInputStream类 以二进制输入 / 输出, I/O 速度快且效率搞。处理非纯文本文件,FileInputStream是唯一的选择;FileInputStream是进Socket通讯时会用到很多,如将文件流是Stream的方式传向服务器!例如:把图片以2进制形式存入数据库;把数据库中的图片读出来显示PS:7L 比较喜欢buffer结帖。
      

  6.   

    感觉楼主的理解有误,FileReader不是能读汉字也能读字节,而是能读字符,如果字符是按 ascii编码的话,当然相当于读字节了,而汉字是默认是按unicode来编码的,每一个unicode的编码是两个字节.就能读汉字等unicode支持的字符了.虽然楼主的意思没错,但是理解上是有问题的.
    其实filereader可以自己设置按照什么编码来读.默认情况下按照unicode来读.像一般的文本中,如果既有英文也有中文,其实是按ANSI(Latin1)来编码的,就是英文部分按照单字节的asci码来编,汉字部分按双字节的unicode来编.那么在读该文本的时候,FileReader既能读字节,也能读双字节,这就是java方便的地方.一般来说,FileReader只适合读文本文件,如果读其它文件会有问题的.而FileInputStream则通吃,但显然没有FileReader读起来方便.综合,读文本类的文件(与后缀名无关,不一定是txt),用FileReader更方便.读非文本类文件一定要用FileInputStream,否则会出问题,(这个可以写代码验证).