20.4.2 为基于流的I/O使用NIO
从JDK 7开始,可以使用NIO打开I/O流。如果拥有Path对象,那么可以通过调用newInputStream()或newOutputStream()方法来打开文件,它们是由File类定义的静态方法。这些方法返回链接到指定文件的流。对于这两种情况,可以使用在第19章中描述的方法来操作流,并且应用相同的技术。使用Path对象打开文件的优点是:NIO定义的所有属性都可以使用。
为了针对基于流的输入操作打开文件,可以使用Files.newInputStream()方法,该方法的一般形式如下所示:
- static InputStream newInputStream(Path path, OpenOption ... how)
- throws IOException
其中,path指定了要打开的文件,how指定了打开文件的方式,how参数的值必须是一个或多个由StandardOpenOption定义的值,在前面描述了这些值(当然,只能应用与输入流相关的选项)。如果没有指定选项,那么文件的打开方式为StandardOpenOption.READ。
一旦打开文件,就可以使用InputStream定义的任何方法。例如,可以使用read()方法从文件读取字节。
下面的程序演示了基于NIO的流I/O的使用。该程序对第13章中的ShowFile程序进行了重写,从而使用NIO特性打开文件并获取流。可以看出,除了使用Path对象和newInputStream()方法外,该版本与原始版本很类似。
|
- new BufferedInputStream(Files.newInputStream(Paths.get(args[0])))
现在,读取的所有数据都会被自动缓存。
为了针对输出操作打开文件,可以使用Files.newOutputStream()方法。该方法如下所示:
- static OutputStream newOutputStream(Path path, OpenOption ... how)
- throws IOException
其中,path指定了要打开的文件,how指定了打开文件的方式,how参数的值必须是StandardOpenOption定义的一个或多个值,在前面描述了这些值(当然,只能应用那些与输出流相关的选项)。如果没有指定选项,那么使用StandardOpenOption.WRITE、StandardOpenOption.CREATE和StandardOpenOption.TRUNCATE_EXISTING打开文件。
使用newOutputStream()方法的方式与前面显示的使用newInputStream()方法的方式类似。一旦打开文件,就可以使用OutputStream定义的任何方法了。例如,可以使用write()方法将字节写入到文件中。为了缓存流,还可以在BufferedOutputSteam对象中封装流。
下面的程序显示了newOutputStream()方法的使用。该程序将字母表写入到test.txt文件中。注意缓存I/O的使用。
|