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 类
- 导入
Scanner类: 在您的 Java 文件顶部添加import java.util.Scanner;。 - 创建
Scanner对象: 创建一个Scanner实例,并将其连接到标准输入流System.in。 - 使用读取方法: 调用
Scanner对象的方法来读取不同类型的数据。 - 关闭
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.io 和 java.nio 包中。这些 API 允许您以字节流或字符流的形式处理文件内容。
我们将在后续的“文件处理”章节中详细探讨如何使用这些类来创建、读取、写入和管理文件。