1. 输入输出概述
Java
提供了一套强大的输入输出(I/O)API,用于处理数据的读取和写入。Java
的 I/O
操作主要分为两类:字节流和字符流。
1.1 字节流与字符流
- 字节流:用于处理原始二进制数据,适合所有类型的数据(如图片、音频等)。
- 字符流:用于处理字符数据,适合文本文件的读取和写入。
2. 字节流
2.1 InputStream 和 OutputStream
InputStream
:所有字节输入流的超类。OutputStream
:所有字节输出流的超类。
2.1.1 常用的字节流类
FileInputStream
:从文件中读取字节。FileOutputStream
:向文件中写入字节。
2.2 示例代码
java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
int data;
while ((data = fis.read()) != -1) {
fos.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 字符流
3.1 Reader 和 Writer
Reader
:所有字符输入流的超类。Writer
:所有字符输出流的超类。
3.1.1 常用的字符流类
FileReader
:从文件中读取字符。FileWriter
:向文件中写入字符。
3.2 示例代码
java
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CharStreamExample {
public static void main(String[] args) {
try (FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")) {
int data;
while ((data = fr.read()) != -1) {
fw.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 缓冲流
缓冲流可以提高 I/O 操作的效率,常用的缓冲流类有:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
4.1 示例代码
java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedStreamExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 文件操作
5.1 文件类
Java 提供了 File
类用于文件的创建、删除、重命名等操作。
5.2 示例代码
java
import java.io.File;
public class FileExample {
public static void main(String[] args) {
File file = new File("example.txt");
try {
if (file.createNewFile()) {
System.out.println("文件创建成功");
} else {
System.out.println("文件已存在");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
6. 控制台输入输出
java
import java.util.Scanner;
public class ConsoleInputExample {
public static void main(String[] args) {
// 创建 Scanner 对象
Scanner scanner = new Scanner(System.in);
// 提示用户输入
System.out.print("请输入您的名字: ");
String name = scanner.nextLine(); // 读取一行字符串
System.out.print("请输入您的年龄: ");
int age = scanner.nextInt(); // 读取整数
// 输出结果
System.out.println("你好, " + name + "! 你的年龄是 " + age + "岁。");
// 关闭 Scanner
scanner.close();
}
}