【Java Core】输入与输出 2

「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

本系列将介绍Java中用于输入和输出的各种应用编程接口(Application Programming Interface, API)。

组合输入/输出流过滤器

FileInputStream和FileOutputStream可以提供附着在一个磁盘文件上的输入流和输出流,而你只需要向其构造器提供文件名或文件的完整路径名。例如:

    InputStream in = new FileInputStream("demo.txt");
复制代码

这行代码可以查看用户目录下名为"demo.txt"的文件。

所有在java.io中的类都将相对路径名解释为用户工作目录开始,你可以通过调用System.getProperty("user.dir")来获得这个信息。

由于在Java字符串中反斜杠字符是转义字符,因此要确保在Windows风格的路径名中使用\(例如:C:\Windows\win.ini)。在Windows中,还可以使用单斜杠字符(C:/Windows/win.ini),因为大部分Windows文件处理的系统调用都会将斜杠解释成文件分隔符。但是,并不推荐这样做,因为Windows系统函数的行为会因与时俱进而发生变化。因此,对于可移植的程序来说,应该使用程序所运行平台的文件分隔符,我们可以使用java.io.File.separator获得它。

与抽象类InputStream和OutputStream一样,这些类只支持在字节级别上的读写。也就是说,我们只能从in对象中读入字节和字节数组。

    byte b = (byte)in.read();
复制代码

如果我们只有DataInputStream,那么我们只能读入数值类型:

    DataInputStream din = . . .;
    double x = din.readDouble();
复制代码

但是正如FileInputStream没有任何读入数值类型的方法一样,DataInputStream也没有任何从文件中读取数据的方法。 我们可以通过对两者的组合来达到从文件中读入数字的目的,首先需要创造一个FileInputStream,然后将其传递给DataInputStream的构造器:

    FileInputStream fin = new FileInputStream("demo.txt");
    DataInputStream din = new DataInputStream(fin);
    double x = din.readDouble();
复制代码

当然,在其他编程语言的输入/输出流类库中,诸如缓冲机制和预览机制等细节都是自动处理的。因此,相比较而言,Java就有一点麻烦,它必须将多个流过滤器组合起来。但是这种混合并匹配过滤器类以构建真正有用的输入/输出流序列的能力,将带来极大的灵活性。

感谢观看,这是Java输入与输出的第2篇文章,如果您有兴趣,可以关注一下我,方便查看后续文章,一起学习,共同进步,不胜感激!

おすすめ

転載: juejin.im/post/7031699206146359327