从文件中读取

Scanner类不仅可用于读取用户输入到输出窗格中的输入,还可用于读取文件中的文本数据。要设置扫描器以从输出窗格读取,我们使用以下语法

扫描器输入=新的扫描器(System.in);

要设置扫描器从文本文件中读取,我们使用以下语法

扫描器输入= new扫描器(new File("numbers.txt"));

其中numbers.txt是我们想要读取的文本文件的名称。

当您尝试使用上面的代码创建一个扫描器以从文件中读取数据时,您将遇到一个小的复杂问题,即扫描器需要一个file对象来告诉它应该从哪个文件中读取数据。不幸的是,创建File对象可能会产生一个异常:如果我们命名的文件不存在,Java可能会抛出一个FileNotFound异常。NetBeans将注意到这种可能性,并强制您包含一些额外的代码,这些代码可能会拦截该异常并在发生异常时处理它。下面的代码将处理这个问题:

扫描器输入= null;try {input = new Scanner(new File("numbers.txt"));} catch (Exception ex) {ex. printstacktrace ();}

如果我们试图打开一个不存在的文件,命令new file ("numbers.txt")将生成一个异常,这将导致我们进入catch块。在catch块中,我们可以告诉异常对象在输出窗格中打印一些关于错误的附加详细信息。

除了异常处理代码之外,你还需要在程序的顶部放置一个import语句来导入File类:

进口java.io.File;

创建要读取的文本文件

要在NetBeans中创建文本文件,首先右键单击项目窗格中的项目。(项目就是旁边有咖啡杯图标的那个东西。)在上下文菜单中,选择New/Other…

在出现的对话框中,选择文件类型类别列表底部的类别Other,然后从右侧的文件类型列表中选择“空文件”。单击Next移动到新建文件对话框的第二部分。

在此对话框中,您将键入文件的名称。单击Finish将创建并打开文本文件,以便您开始在其中键入数据。

如果稍后需要定位文本文件,可以在NetBeans的文件窗格中访问它。

第一个示例程序-从文本文件中读取数字

下面是演示如何从文本文件中读取整数列表的第一个简单示例程序的代码:

包fileexamples;进口java.io.File;进口java.util.Scanner;公共类ReadNumbers{公共静态void main(String[] args){扫描器输入= null;try {input = new Scanner(new File("numbers.txt"));} catch(异常ex) {System.out。println(“无法打开文件”);system . exit (0);} while(input.hasNextInt()) {int number = input.nextInt();System.out.println(数量);} input.close ();}}

这个程序打开一个扫描器,从名为“数字。txt”的文本文件中读取。如果输入文件不存在,程序将打印一条消息,然后退出,否则我们继续从文件中读取数据。在文件上打开Scanner之后,我们可以使用常用的命令nextInt()从文件中读取下一个可用的整数。程序将尝试读取文本文件中的赢博体育数字,并将它们打印到输出窗格。

从文件输入的一个复杂之处在于,我们可能无法事先知道文本文件中有多少个数字。为了帮助解决这个问题,Scanner类提供了一个有用的方法hasNextInt(),如果有更多的数字可以从文件中读取,则返回true,一旦读取到文件的末尾,则返回false。正如您在示例程序中看到的那样,我们可以使用hasNextInt()来控制一个while循环,该循环从文件中读取数字,直到读取完赢博体育数字为止。

搜索问题

下面是一个搜索问题的典型示例:给定文件中没有特定顺序的数字列表,找出文件中最小和最大的数字。

为了解决这个问题,我们设置了两个变量,一个存储到目前为止我们看到的最小的数字,另一个存储到目前为止我们看到的最大的数字。我们从该文件中读取第一个数字开始:这个数字同时是我们迄今为止看到的最小和最大的数字。然后,当我们读取文件中其余的数字时,我们将每个新数字与这些变量进行比较,看看我们是否找到了新的最大值或最小值。

public static void main(String[] args){扫描器输入= null;try {input = new Scanner(new File("numbers.txt"));} catch(异常ex) {System.out。println(“无法打开文件”);system . exit (0);} int最小= input.nextInt();Int最大=最小;while(input.hasNextInt()) {int number = input.nextInt();If (number <最小)最小= number;If (number > *大)*大= number;} input.close ();system . out。println(“文件中的数字范围从” +最小+ “到” +最大");}

写入文件

有时我们会发现自己编写的程序会产生大量输出。如果我们希望保存该输出以供以后使用,我们可以安排程序将其输出打印到文件中,而不是在NetBeans中的输出窗格中。

下一个示例将展示如何做到这一点。对于这个例子,我从循环讲座中选取了一个例子,并将其重写为将其输出写入文件而不是System.out。这个例子是一个程序,它生成一个包含从1到1000的赢博体育素数的列表。

public static void main(String[] args) {printwwriter pw = null;try {pw = new printwwriter (new File("prime .txt"));} catch(异常ex) {System.out。println(“无法打开文件进行写入”);system . exit (0);} int n = 3;当(n < 1000) {int d = n - 1;While (n % d == 0) {break;} d——;} if (d == 1) {pww .println(n);} n = n + 2;} pw.close ();}

这里有一些关于这个例子的注意事项。