java - FileReader 与 BufferedReader 或 FileInputStream 组合

标签 java file bufferedreader filereader fileinputstream

我很困惑何时应该使用 FileReaderBufferedReader 的组合以及何时使用 FileInputStream 来读取文件(并输出到日志)?

/**
 * Created by mona on 3/26/16.
 */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
public class FileExample {


    public static void main (String[] args) throws java.io.IOException {

        File newFile = new File("tweet.txt");

        FileWriter fileWriter = new FileWriter(newFile);
        fileWriter.write("Mona Jalal");
        fileWriter.append("\nMona Mona");
        fileWriter.close();
        /*FileReader fileReader = new FileReader(newFile);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        fileReader.close();
        bufferedReader.close();
        */
        FileInputStream fis = new FileInputStream(newFile);
        System.out.println("fis");
        System.out.println(fis.read()); //prints 77
        int content;
        while ((content=fis.read())!=-1){
            System.out.print((char) content);
        }
        fis.close();

    }
}

我正在使用Java 8

最佳答案

用于读取原始字节:FileInputstream https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html

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.


用于有效读取字符、数组、行(使用缓冲区) https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders. For example,

BufferedReader in = new BufferedReader(new FileReader("foo.in"));

will buffer the input from the specified file. Without buffering, each invocation of read() or readLine() could cause bytes to be read from the file, converted into characters, and then returned, which can be very inefficient.

Java 有非常好的文档!

关于java - FileReader 与 BufferedReader 或 FileInputStream 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36256321/

相关文章:

java - 从文本文件读取时出错

android - IOException BufferedInputStream 在 HTC 中关闭

java - 需要 Java 建议来处理未索引文件中存在的数十亿条记录

java - 如何在新的 webview 窗口中打开扫描的链接 AndroidStudio Zxing

java - 具有大量数据库表的通用实现

php - File_exist 在 Ubuntu/PHP 中显示错误

java - log4j:错误 setFile(null,true)调用失败。java.io.FileNotFoundException:

java - 在JAVA中强制浏览器下载docx文件会生成损坏的文档

java - JDOQL 在搜索成员列表变量中是否存在一个或多个元素时,有什么方法可以避免查询中的多个 .contains() 调用吗?

c - 在 C 中没有 fclose 的 fopen