BufferedReader如何知道要读取哪个文件?

时间:2016-05-12 06:44:18

标签: java eclipse bufferedreader filereader writer

让我说我有

try (FileWriter fw = new FileWriter("test.txt",false)) {
    BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
    do {
        str = bw.readLine();
        if (str.compareTo("stop") == 0) break;
        str = str + " ";
        fw.write(str);
    } while(str.compareTo("stop")!=0);
} catch(IOException e) {

}

我的BufferedReader如何知道要读取的输入流?在bw.readLine()的情况下? 在我的FileReader的情况下?那么为什么我必须指定要读取的文件?或者是

String s;
//create a BufferedReader that reads a stream of characters
//FileReader Writes character Values 
try (FileReader decodeFile = new FileReader("test.txt")) {
    BufferedReader readFile=new BufferedReader(decodeFile);

    //first check to see if br has a null value
    while ((s=readFile.readLine()) != null) {
        System.out.println(s);
    }
} catch (IOException e) {
    e.printStackTrace();
}

我对此非常困惑,有人可以对此有所了解吗?是的,我已经阅读了文档,所以我知道两者都做了什么

3 个答案:

答案 0 :(得分:1)

Streams只是一个连续的数据流。Java中的大多数Reader类子类声明了流在构造函数中的来源。

  1. 对于第一种情况,InputStreamReaderSystem.in获取其输入。 System.in是由用户输入提供的数据流。尝试运行java文件并输入几个字符,然后在终端输入。

  2. BufferedReader是专门有效阅读文字的读者。它从另一个流源获取数据的内容。在这种情况下,BufferedReader(decodeFile)表示decodefileBufferedReader从中读取流数据的位置。 decodefileFileReader类型,FileReader("test.txt")表示文件读取来自名为test.txt的文件。因此,流程将如下所示:"test.txt" - > FileReader - > BufferedReader

  3. 更新

    查看文档有帮助。 https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html

    PrintWriter可帮助您以您希望的格式编写输出。 (按格式,我的意思是附加一个字符,行刷新,格式化。)

    另一方面,FileWriter将流内容写入文件。因此,在这种情况下,以下将是流程。

    String - > PrintWriter - > FileWriter - > "outputfile.txt"

    字符串内容可能会改变如下

    “text” - > “格式化文字” - > “for”,“matted”,“text” - > “格式化文字”

    使用流的重点是分块大量数据,这样进程就不会占用太多的RAM(内存)。因此,如上所示,分块可能(但不一定)发生。

答案 1 :(得分:0)

BufferedReader并非真正关心它读取的内容,只要它是Reader即可。它只是一个decorator,可以为另一个Reader实现添加功能。 Reader所做的(通常从流中读取,但可能来自字符串,甚至生成随机数据)与BufferedReader无关。

所有BufferedReader所做的就是从包装的Reader中读取并缓冲结果,以便有些事情可以实现,例如读取整行(这需要您阅读足够的内容,直到找到流的结尾或下一个换行符。)

答案 2 :(得分:0)

BufferedReader构造函数中,您指定精确Reader,实际上将从输入流中读取数据。就像@Joey说的那样,它只是装饰者

在您的示例中,您将从标准输入流中读取,在第二种情况下,将从精确文件中读取