为什么Java如此难以读取文件

vie*_*ean 6 java

我真的不知道,为什么这对于读取包含很多类的文件来说是如此复杂和困难

  • 的InputStream
  • DataInputStream类
  • 的InputStream
  • BufferReader

以下有什么优点?那里的哲学是什么?

private static String fileToString(String filename) throws IOException
{
    InputStream resourceAsStream;
    resourceAsStream        = "".getClass().getResourceAsStream(filename);
    DataInputStream in      = new DataInputStream(resourceAsStream);
    BufferedReader reader   = new BufferedReader(new InputStreamReader(in));
    StringBuilder builder   = new StringBuilder();
    String line;    
    // For every line in the file, append it to the string builder
    while((line = reader.readLine()) != null)
    {
        builder.append(line);
    }
    return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 9

如果你想读一个你有路径的文件,你甚至可以这样做:

List<String> lines = Files.readAllLines(Paths.get("/path/to/your/file"), charset);
Run Code Online (Sandbox Code Playgroud)

注意:需要Java 7+


Bil*_*ard 8

理念是灵活性.使用不同类型的数据流,您可以轻松地读取和写入不同类型的数据,如字节,文本行或整个用户定义的对象,一次一个地输入和输出I/O源.

来自Java教程 - I/O流:

I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,包括磁盘文件,设备,其他程序和内存阵列.

Streams支持许多不同类型的数据,包括简单字节,原始数据类型,本地化字符和对象.有些流只传递数据; 其他人以有用的方式操纵和转换数据.

从课程轨迹课程:基本I/O开始,以便更好地了解Java I/O.


如果您想查看如何简化Java中各种数据类型的I/O的具体示例,我建议您查看Sedgewick和Wayne 标准库中的In.javaOut.java类.