本文目录导读:

我来给你一个从基础到入门的Java IO流实操指南,包含最常用的几个案例。
文件字节流操作(最基础)
1 文件复制(字节流)
import java.io.*;
public class FileCopyDemo {
public static void main(String[] args) {
// 源文件和目标文件路径
String sourceFile = "D:/test/source.txt";
String destFile = "D:/test/dest.txt";
// 使用try-with-resources自动关闭流
try (FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(destFile)) {
byte[] buffer = new byte[1024]; // 1KB缓冲区
int bytesRead;
// 读取数据并写入
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
System.out.println("文件复制完成!");
} catch (FileNotFoundException e) {
System.out.println("文件未找到:" + e.getMessage());
} catch (IOException e) {
System.out.println("IO异常:" + e.getMessage());
}
}
}
字符流操作(处理文本文件)
1 读取文本文件
import java.io.*;
public class TextFileReader {
public static void main(String[] args) {
String filePath = "D:/test/input.txt";
try (FileReader fr = new FileReader(filePath);
BufferedReader br = new BufferedReader(fr)) {
String line;
int lineNumber = 0;
// 逐行读取
while ((line = br.readLine()) != null) {
lineNumber++;
System.out.println("第" + lineNumber + "行: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2 写入文本文件
import java.io.*;
public class TextFileWriter {
public static void main(String[] args) {
String filePath = "D:/test/output.txt";
String[] content = {
"第一行内容",
"第二行内容",
"第三行内容"
};
try (FileWriter fw = new FileWriter(filePath, false); // false=覆盖, true=追加
BufferedWriter bw = new BufferedWriter(fw)) {
for (String line : content) {
bw.write(line);
bw.newLine(); // 换行
}
// 手动刷新缓冲区
bw.flush();
System.out.println("写入完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
综合案例:配置文件读写
import java.io.*;
import java.util.Properties;
public class ConfigManager {
// 写入配置
public void saveConfig(String filePath) {
Properties prop = new Properties();
// 设置配置项
prop.setProperty("server.port", "8080");
prop.setProperty("server.host", "localhost");
prop.setProperty("db.username", "admin");
prop.setProperty("db.password", "123456");
try (FileOutputStream fos = new FileOutputStream(filePath)) {
// 保存到文件
prop.store(fos, "Server Configuration");
System.out.println("配置保存成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
// 读取配置
public void loadConfig(String filePath) {
Properties prop = new Properties();
try (FileInputStream fis = new FileInputStream(filePath)) {
// 从文件加载配置
prop.load(fis);
// 读取配置项
String port = prop.getProperty("server.port");
String host = prop.getProperty("server.host");
String username = prop.getProperty("db.username");
System.out.println("服务器配置:");
System.out.println("端口: " + port);
System.out.println("主机: " + host);
System.out.println("用户名: " + username);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ConfigManager cm = new ConfigManager();
String configFile = "D:/test/config.properties";
// 保存配置
cm.saveConfig(configFile);
// 读取配置
cm.loadConfig(configFile);
}
}
对象序列化
import java.io.*;
// 需要序列化的类必须实现Serializable接口
class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private transient String password; // transient关键字表示不序列化
public Student(String name, int age, String password) {
this.name = name;
this.age = age;
this.password = password;
}
@Override
public String toString() {
return "Student{name='" + name + "', age=" + age + ", password='" + password + "'}";
}
}
public class ObjectIODemo {
// 序列化对象到文件
public void serializeObject(String filePath, Student student) {
try (FileOutputStream fos = new FileOutputStream(filePath);
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(student);
System.out.println("对象序列化成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
// 从文件反序列化对象
public Student deserializeObject(String filePath) {
try (FileInputStream fis = new FileInputStream(filePath);
ObjectInputStream ois = new ObjectInputStream(fis)) {
Student student = (Student) ois.readObject();
return student;
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
ObjectIODemo demo = new ObjectIODemo();
String filePath = "D:/test/student.dat";
// 创建对象并序列化
Student stu = new Student("张三", 20, "secret123");
demo.serializeObject(filePath, stu);
// 反序列化
Student stuLoaded = demo.deserializeObject(filePath);
if (stuLoaded != null) {
System.out.println("反序列化结果: " + stuLoaded);
}
}
}
实际项目工具类
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class FileUtils {
/**
* 读取文本文件所有行
*/
public static List<String> readLines(String filePath) {
List<String> lines = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return lines;
}
/**
* 写入字符串列表到文件
*/
public static void writeLines(String filePath, List<String> lines) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
for (String line : lines) {
writer.write(line);
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 复制文件
*/
public static void copyFile(String sourcePath, String destPath) {
try (FileInputStream fis = new FileInputStream(sourcePath);
FileOutputStream fos = new FileOutputStream(destPath)) {
byte[] buffer = new byte[8192]; // 8KB缓冲区
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取文件内容为字符串
*/
public static String readFileAsString(String filePath) {
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return content.toString();
}
public static void main(String[] args) {
// 测试工具类
String testFile = "D:/test/test.txt";
// 写入测试数据
List<String> data = new ArrayList<>();
data.add("Hello");
data.add("World");
data.add("Java IO");
writeLines(testFile, data);
// 读取测试数据
List<String> readData = readLines(testFile);
System.out.println("读取的数据: " + readData);
}
}
关键知识点总结
-
字节流 vs 字符流
- 字节流:处理二进制文件(图片、视频等)
- 字符流:处理文本文件(.txt, .xml等)
-
缓冲流的作用
- 提高读写效率
- 减少物理IO次数
-
try-with-resources
- 自动关闭流资源
- 代码更简洁
-
常见注意事项
- 用完必须关流
- 字符编码要统一
- 缓冲区大小选择(4KB-8KB较合适)
这些案例覆盖了日常开发中最常用的IO操作场景,建议动手实践每个案例,加深理解。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播