Skip to content

Java 输入和输出

输入和输出 (I/O) 是程序与外部世界(如用户、文件、网络)交互的方式。本章将重点介绍 Java 中最基本的 I/O 操作:从控制台读取标准输入和向控制台写入标准输出。

标准输出 (Standard Output)

我们其实已经一直在使用标准输出了。System.out 是一个 PrintStream 对象,代表了标准输出流,通常是您的控制台或终端窗口。

System.out.println()

打印传递给它的内容,并在末尾自动添加一个换行符。这是最常用的输出方法。

java
System.out.println("Hello, Java!");
System.out.println("这是新的一行。");

System.out.print()

打印内容,但添加换行符。后续的输出会紧跟在当前输出的后面。

java
System.out.print("Hello, ");
System.out.print("World!");
// 输出结果将是: Hello, World!

System.out.printf()

提供格式化的输出,类似于 C 语言的 printf 函数。它允许您使用格式说明符来控制输出的格式。

  • %s: 字符串
  • %d: 十进制整数
  • %f: 浮点数
  • %n: 平台独立的换行符
java
String name = "Alice";
int age = 30;
double height = 1.65;

System.out.printf("姓名: %s, 年龄: %d, 身高: %.2f 米%n", name, age, height);
// 输出: 姓名: Alice, 年龄: 30, 身高: 1.65 米
// %.2f 表示浮点数保留两位小数

标准输入 (Standard Input)

要从控制台读取用户的输入,最简单、最现代的方式是使用 java.util.Scanner 类。

使用 Scanner

  1. 导入 Scanner: 在您的 Java 文件顶部添加 import java.util.Scanner;
  2. 创建 Scanner 对象: 创建一个 Scanner 实例,并将其连接到标准输入流 System.in
  3. 使用读取方法: 调用 Scanner 对象的方法来读取不同类型的数据。
  4. 关闭 Scanner: 使用完毕后,调用 close() 方法释放资源。

常用 Scanner 方法:

  • nextLine(): 读取一行完整的文本(直到用户按下回车)。
  • next(): 读取下一个单词(以空白字符为分隔符)。
  • nextInt(): 读取一个整数。
  • nextDouble(): 读取一个双精度浮点数。
  • hasNextInt() / hasNextDouble(): 检查输入流中是否还有下一个指定类型的令牌。

示例:一个简单的交互式程序

java
// 必须在文件顶部导入 Scanner 类
import java.util.Scanner;

public class UserInputExample {
    public static void main(String[] args) {
        // 1. 创建 Scanner 对象
        Scanner scanner = new Scanner(System.in);

        // 2. 提示用户输入并读取
        System.out.print("请输入您的姓名: ");
        String name = scanner.nextLine(); // 读取整行字符串

        System.out.print("请输入您的年龄: ");
        int age = scanner.nextInt(); // 读取整数

        System.out.print("请输入您的薪水: ");
        double salary = scanner.nextDouble(); // 读取浮点数

        // 3. 打印收集到的信息
        System.out.println("\n--- 用户信息确认 ---");
        System.out.printf("姓名: %s%n", name);
        System.out.printf("年龄: %d%n", age);
        System.out.printf("薪水: %.2f%n", salary);

        // 4. 关闭 Scanner
        scanner.close();
    }
}

注意: 当混合使用 nextInt()nextLine() 时,可能会遇到问题。因为 nextInt() 只读取数字,而将换行符留在输入流中。下一个 nextLine() 会立即读到这个换行符并返回一个空字符串。一个常见的解决方法是在 nextInt() 之后额外调用一次 scanner.nextLine() 来消耗掉这个多余的换行符。

文件 I/O 简介

除了标准 I/O,Java 还提供了强大的 API 来读写文件,主要位于 java.iojava.nio 包中。这些 API 允许您以字节流或字符流的形式处理文件内容。

我们将在后续的“文件处理”章节中详细探讨如何使用这些类来创建、读取、写入和管理文件。

本站内容仅供学习和研究使用。