编程 101:使用 Java 进行输入和输出

了解 Java 如何处理数据的读取和写入。
57 位读者喜欢这篇文章。
What is your favorite open source Java IDE?

Pixabay。CC0。

当你编写程序时,你的应用程序可能需要读取和写入存储在用户计算机上的文件。这在需要加载或存储配置选项、需要创建日志文件或用户想要保存以供以后使用时很常见。每种语言处理此任务的方式都略有不同。本文演示了如何使用 Java 处理数据文件。

安装 Java

无论你的计算机平台是什么,你都可以从 AdoptOpenJDK 安装 Java。该网站提供安全且开源的 Java 构建版本。在 Linux 上,你还可以在你的软件存储库中找到 AdoptOpenJDK 构建版本。

我建议使用最新的长期支持 (LTS) 版本。最新的非 LTS 版本最适合想要尝试最新 Java 功能的开发人员,但它可能超过大多数用户已安装的版本——无论是系统上的默认版本还是以前为其他 Java 应用程序安装的版本。使用 LTS 版本可确保你了解大多数用户已安装的最新版本。

安装 Java 后,打开你喜欢的文本编辑器并准备好进行编码。你可能还想研究一个 Java 集成开发环境。BlueJ 非常适合新程序员,而 Eclipse 和 Netbeans 则非常适合中级和有经验的程序员。

使用 Java 读取文件

Java 使用 File 库来加载文件。

此示例创建一个名为 Ingest 的类来从文件中读取数据。在 Java 中打开文件时,你需要创建一个 Scanner 对象,该对象会逐行扫描你提供的文件。实际上,Scanner 与文本编辑器中的光标是相同的概念,你可以使用 ScannernextLine 等方法来控制用于读取和写入的“光标”。

import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;

public class Ingest {
  public static void main(String[] args) {
    
      try {
          File myFile = new File("example.txt");
          Scanner myScanner = new Scanner(myFile);
          while (myScanner.hasNextLine()) {
              String line = myScanner.nextLine();
              System.out.println(line);
          }
          myScanner.close();
      } catch (FileNotFoundException ex) {
      	  ex.printStackTrace();	  
      } //try
    } //main
} //class

此代码创建变量 myfile,并假设存在名为 example.txt 的文件。如果该文件不存在,Java 会“抛出一个异常”(这意味着它在你要执行的操作中发现了一个错误并说明了原因),该异常会被非常特定的 FileNotFoundException 库“捕获”。专门针对此确切错误的库的存在表明此错误有多么常见。

接下来,它创建一个 Scanner 并将文件加载到其中。我将其命名为 myScanner 以将其与它的通用类模板区分开来。一个 while 循环会使 myScanner 逐行地遍历文件,只要下一行即可。这就是 hasNextLine 方法的作用:它检测在“光标”之后是否有任何数据。你可以通过在文本编辑器中打开文件来模拟此操作:你的光标从文件的最开始处开始,你可以使用键盘通过光标扫描文件,直到没有行可扫描为止。

while 循环创建一个变量 line 并将其赋值为当前行的数据。然后,它打印 line 的内容,只是为了提供反馈。一个更有用的程序可能会解析每一行以提取它包含的任何重要数据。

在该过程结束时,myScanner 对象会关闭。

运行代码

将你的代码另存为 Ingest.java(Java 的惯例是给类一个首字母大写的名称,并将文件名与之匹配)。如果你尝试运行此简单应用程序,你可能会收到一个错误,因为应用程序还没有要加载的 example.txt

$ java ./Ingest.java
java.io.FileNotFoundException:
example.txt (No such file or directory)

多么完美的机会来编写一个将数据写入文件的 Java 应用程序!

使用 Java 将数据写入文件

无论你是存储用户使用你的应用程序创建的数据,还是仅仅存储有关用户在应用程序中所做操作的元数据(例如,游戏存档或最近播放的歌曲),都有很多很好的理由来存储数据以供以后使用。在 Java 中,这是通过 FileWriter 库实现的,这次是通过打开一个文件,将数据写入其中,然后关闭该文件

import java.io.FileWriter;
import java.io.IOException;

public class Exgest {
  public static void main(String[] args) {
    try {
        FileWriter myFileWriter = new FileWriter("example.txt", true);
        myFileWriter.write("Hello world\n");
        myFileWriter.close();
    } catch (IOException ex) {
        System.out.println(ex);
    } // try
  } // main
}

该类的逻辑和流程与读取文件类似。它不是创建一个 Scanner,而是使用文件名创建一个 FileWriter 对象。FileWriter 语句末尾的 true 标志告诉 FileWriter 将文本附加到文件末尾。要覆盖文件的内容,请删除 true

FileWriter myFileWriter = new FileWriter("example.txt", true);

因为我将纯文本写入文件,所以在写入文件的数据 (Hello world) 的末尾添加了我自己的换行符 (\n)。

尝试代码

按照 Java 的约定,将此代码另存为 Exgest.java,文件名与类名匹配。

现在你已经拥有了使用 Java 创建和读取数据的方法,你可以按相反的顺序尝试你的新应用程序

$ java ./Exgest.java
$ java ./Ingest.java
Hello world
$

因为它将数据附加到末尾,你可以重复你的应用程序来写入数据,你想向你的文件中添加多少数据都可以

$ java ./Exgest.java
$ java ./Exgest.java
$ java ./Exgest.java
$ java ./Ingest.java
Hello world
Hello world
Hello world
$

Java 和数据

你通常不会将原始文本写入文件中;在现实世界中,你可能会使用一个额外的库来写入特定的格式。例如,你可能会使用一个 XML 库来写入复杂的数据,一个 INI 或 YAML 库来写入配置文件,或者任意数量的专用库来写入像图像或音频这样的二进制格式。

有关完整信息,请参阅 OpenJDK 文档

接下来要阅读的内容
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算行业工作,而且通常是同时进行。

评论已关闭。

Creative Commons License本作品采用知识共享署名 - 相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.