zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Java核心技术卷I基础知识3.7.3 文件输入与输出

2023-03-09 22:17:56 时间

3.7.3 文件输入与输出


要想对文件进行读取,就需要一个用File对象构造一个Scanner对象,如下所示:

 

如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠: “c:\\mydirectory\\myf?ile.txt”。

      注释:在这里指定了UTF-8字符编码,这对于互联网上的文件很常见(不过并不是普遍适用)。读取一个文本文件时,要知道它的字符编码——更多信息参见卷Ⅱ第2章。如果省略字符编码,则会使用运行这个Java程序的机器的“默认编码”。这不是一个好主意,如果在不同的机器上运行这个程序,可能会有不同的表现。

现在,就可以利用前面介绍的任何一个Scanner方法对文件进行读取。

要想写入文件,就需要构造一个PrintWriter对象。在构造器中,只需要提供文件名:

 

如果文件不存在,创建该文件。可以像输出到System.out一样使用print、println以及printf命令。

      警告:可以构造一个带有字符串参数的Scanner,但这个Scanner将字符串解释为数据,而不是文件名。例如,如果调用:

 

这个scanner会将参数作为包含10个字符的数据:‘m’,‘y’,‘f’等。在这个示例中所显示的并不是人们所期望的效果。

      注释:当指定一个相对文件名时,例如,“myf?ile.txt”,“mydirectory/myf?ile.txt”或“../myf?ile.txt”,文件位于Java虚拟机启动路径的相对位置。如果在命令行方式下用下列命令启动程序:

 

启动路径就是命令解释器的当前路径。然而,如果使用集成开发环境,那么启动路径将由IDE控制。可以使用下面的调用方式找到路径的位置:

 

如果觉得定位文件比较烦恼,则可以考虑使用绝对路径,例如:“c:\\mydirectory\\ myf?ile.txt”或者“/home/me/mydirectory/myf?ile.txt”。

正如读者所看到的,访问文件与使用System.in和System.out一样容易。要记住一点:如果用一个不存在的文件构造一个Scanner,或者用一个不能被创建的文件名构造一个PrintWriter,那么就会发生异常。Java编译器认为这些异常比“被零除”异常更严重。在第7章中,将会学习各种处理异常的方式。现在,应该告知编译器:已经知道有可能出现“输入/输出”异常。这需要在main方法中用throws子句标记,如下所示:

 

现在读者已经学习了如何读写包含文本数据的文件。对于更加高级的技术,例如,处理不同的字符编码、处理二进制数据、读取目录以及写压缩文件,请参看卷Ⅱ第2章。

      注释:当采用命令行方式启动一个程序时,可以利用Shell的重定向语法将任意文件关联到System.in和System.out:

 

这样,就不必担心处理IOException异常了。

java.util.Scanner 5.0

Scanner(File f)

构造一个从给定文件读取数据的Scanner。

Scanner(String data)

构造一个从给定字符串读取数据的Scanner。

java.io.PrintWriter 1.1

PrintWriter(String f?ileName)

构造一个将数据写入文件的PrintWriter。文件名由参数指定。

java.nio.f?ile.Paths 7

static Path get(String pathname)

根据给定的路径名构造一个Path。