为什么java实现读取文件如此困难

vlf7wbxs  于 2021-07-09  发布在  Java
关注(0)|答案(5)|浏览(594)

就目前的情况来看,这个问题并不适合我们的问答形式。我们希望答案能得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或广泛讨论。如果您觉得这个问题可以改进,并可能重新打开,请访问帮助中心寻求指导。
8年前关门了。
我真的不知道,为什么仅仅阅读一个包含很多类的文件就这么复杂和困难
输入流
数据输入流
输入流
缓冲读取器
下面的优点是什么?哲学在这里是什么?

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();
}
of1yzvn4

of1yzvn41#

既然你说了两次inputstream,实际上只有3件事;)但这是因为可以存储不同的文件(序列化对象、图像、文本等),所以它们都有一个共同的基础(inputstream)。然后,对于基本文本,有一个新类bufferedreader来处理这种特定类型的文件存储/读取。最后,bufferreader只是为了提高效率;你可能不想要它,所以它是可选的
还有,johan sjöberg是正确的,这里不需要datainputstream,只需执行以下操作:

BufferedReader reader   = new BufferedReader(new InputStreamReader(resourceAsStream));
ct2axkht

ct2axkht2#

如果要读取有路径的文件,甚至可以执行以下操作:

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

注意:需要java 7+

v09wglhw

v09wglhw3#

你可以把代码缩短一点,省去不必要的代码 DataInputStream ,您可以使用 FileReader 取而代之的是:

private static String fileToString(String filename) throws IOException {
    BufferedReader reader   = new BufferedReader(new FileReader(filename));
    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();
}

我还发现下面的一个班轮在http://rosettacode.org/wiki/read_entire_file#java:

new Scanner(new File("foo"), "UTF-8").useDelimiter("\\A").next();
1aaf6o9v

1aaf6o9v4#

哲学是灵活的。使用不同类型的数据流,您可以轻松地读取和写入不同类型的数据,如字节、文本行或整个用户定义对象,一次一个从i/o源读取和写入。
从java教程-i/o流:
i/o流表示输入源或输出目标。流可以表示许多不同类型的源和目标,包括磁盘文件、设备、其他程序和内存阵列。
流支持许多不同类型的数据,包括简单字节、基本数据类型、本地化字符和对象。有些流只是传递数据;其他人以有用的方式操纵和转换数据。
从“教程:基本i/o”开始,全面了解java i/o。
如果您想看到如何简化java中各种数据类型的i/o的具体示例,我建议您看看sedgewick&wayne标准库中的in.java和out.java类。

w41d8nur

w41d8nur5#

结帐项目lombok并不一定很难:通过简单地包含一个jar文件,读取一个文件可能是这样的:

@Cleanup InputStream in = new FileInputStream("File.txt");
byte[] b = new byte[10000];
while (true) {
 int r = in.read(b);
 if (r == -1) break;
}

相关问题