使用 PrintWriter 写数据
java.io.PrintWriter 类可用来创建一个文件并向文本文件写入数据。
首先创建一个 PrintWriter 对象,如下所示:
PrintWriter output = new PrintWriter(filename); // 若不存在则创建一个新文件
然后,可以调用 PrintWriter 对象上的 print, println, printf 方法向文件写入数据。
使用 try-with-resources 自动关闭资源
程序员经常忘记关闭文件,JDK 7 提供了 try-with-resources 语法来自动关闭文件。
try( 声明和创建资源 ) {
使用资源来处理文件;
}
资源必须是 AutoClosebale 的子类型,比如PrinterWriter,具有一个close()方法
下面举一个向文件中写数据的小例子:
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
// 调用PrintWriter的构造方法可能会抛出某种I/O异常,Java强制编写代码处理这类异常
// 为了简单起见,只要在方法头中声明 throws Exception 即可
public class test {
public static void main(String[] args) throws IOException {
File file = new File("scores.txt");
if (file.exists()) { // 检查scores.txt是否存在
System.out.println("File already exists");
System.exit(1); // 如果存在则退出程序
}
// 如果不存在则创建一个新文件
try (PrintWriter output = new PrintWriter(file);) {
output.print("John T Smith ");
output.println(90);
output.print("Eric K Jones ");
output.println(85);
// 若没有try-with-resources结构则必须使用 close() 关闭文件,否则数据就不能正常地保存在文件中
// output.close();
}
}
}
// result is
// John T Smith 90
// Eric K Jones 85
使用 Scanner 读数据
Scanner 可以将输入分为由空白字符分割的标记。
为了能从键盘读取,需要为 System.in 创建一个Scanner,如下所示:
Scanner input = new Scanner(System.in);
同样地,为了从文件中读取,为文件创建一个Scanner,如下所示:
Scanner input = new Scanner(new File(filename));
下面举个例子,从文件 score.txt 中读取数据
import java.io.File;
import java.util.Scanner;
import java.io.IOException;
// 调用Scanner的构造方法可能会抛出一个I/O异常
public class test {
public static void main(String[] args) throws IOException {
File file = new File("scores.txt");
Scanner input = new Scanner(file);
while (input.hasNext()) {
String firstName = input.next();
String mi = input.next();
String lastName = input.next();
int score = input.nextInt();
System.out.println(firstName + " " + mi + " " + lastName + " " + score);
}
// 没必要关闭输入文件,但这样做是一种释放资源的好方法
input.close();
}
}
// result is
// John T Smith 90
// Eric K Jones 85