跳转至

输入输出 (I/O)

Java 提供了丰富的 I/O 类库,用于处理文件、网络、控制台等输入输出操作。本章将介绍 Java 中常用的 I/O 操作。

1. 文件读写

Java 的 java.io 包提供了 FileFileInputStreamFileOutputStream 等类,用于文件操作。

示例:读取文件内容

import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class ReadFileExample {
    public static void main(String[] args) {
        File file = new File("example.txt");
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例:写入文件内容

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

public class WriteFileExample {
    public static void main(String[] args) {
        File file = new File("output.txt");
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
            writer.write("Hello, Java I/O!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 标准输入输出

Java 的 System.inSystem.out 分别用于标准输入和输出。

示例:从控制台读取输入

import java.util.Scanner;

public class ConsoleInputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter your name: ");
        String name = scanner.nextLine();
        System.out.println("Hello, " + name + "!");
    }
}

3. 序列化与反序列化

Java 的 ObjectInputStreamObjectOutputStream 类支持对象的序列化和反序列化。

示例:对象序列化

import java.io.*;

public class SerializationExample {
    public static void main(String[] args) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
            oos.writeObject(new Person("Alice", 30));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class Person implements Serializable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

4. NIO 包

Java 的 java.nio 包提供了更高效的 I/O 操作,如 FilesPaths 等工具类。

示例:使用 NIO 读取文件

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

public class NIOExample {
    public static void main(String[] args) {
        try {
            String content = new String(Files.readAllBytes(Paths.get("example.txt")));
            System.out.println(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

Java 的 I/O 操作非常灵活,支持多种输入输出场景。通过 java.iojava.nio 包,可以高效地完成文件读写、网络通信等任务。