IO流与文件操作实验报告Java,求设计思路与文件代码以及运行结果截图。

关注引自免费微信小程序:皆我百晓生
实验四:流与文件操作
设计思路: 本实验主要涉及Java I/O流和文件操作的基本概念和技术。以下是每个任务的详细设计方案:
文件拷贝
随机读写文件
序列化与反序列化
展示文件夹结构
核心代码:
import java.io.*;
import java.util.*;
public class FileOperations {
// 任务1:文件拷贝
public static void copyFile(String sourcePath, String destinationPath) throws IOException {
File src = new File(sourcePath);
File dst = new File(destinationPath);
try (BufferedReader reader = new BufferedReader(new FileReader(src));
BufferedWriter writer = new BufferedWriter(new FileWriter(dst))) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line + "\n");
}
writer.newLine();
writer.write("拷贝完成");
}
}
// 任务2:随机读写文件
public static void randomReadWrite(String filePath) throws IOException {
List<Double> numbers = Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0);
try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
for (int i = 0; i < numbers.size(); i++) {
file.seek(i * Double.BYTES);
file.writeDouble(numbers.get(i));
}
}
try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
file.seek(5 * Double.BYTES); // 跳转到第六个位置
file.writeDouble(666.0); // 写入新的值
}
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
int index = 9;
while ((line = reader.readLine()) != null && index >= 0) {
System.out.printf("%d: %f%n", index, Double.parseDouble(line));
index--;
}
}
}
// 任务3:序列化与反序列化
public static void serializeDeserialize(String filename) throws IOException, ClassNotFoundException {
User user = new User("Alice", "secret");
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
oos.writeObject(user);
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
User deserializedUser = (User) ois.readObject();
System.out.println("Deserialized username: " + deserializedUser.getUsername());
System.out.println("Deserialized password: " + deserializedUser.getPassword());
}
}
// 任务4:展示文件夹结构
public static void displayFolderStructure(File folder, int level) {
if (folder == null || !folder.exists() || !folder.isDirectory()) return;
for (File file : folder.listFiles()) {
for (int i = 0; i < level; i++) {
System.out.print("\t");
}
if (file.isDirectory()) {
System.out.print("- ");
displayFolderStructure(file, level + 1);
} else {
System.out.print("|-- ");
System.out.println(file.getName());
}
}
}
public static void main(String[] args) throws Exception {
// 运行实验任务
copyFile("source.txt", "copy_source.txt");
randomReadWrite("test.dat");
serializeDeserialize("user.ser");
displayFolderStructure(new File("/path/to/your/directory"), 0);
}
}
class User implements Serializable {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
// Getters and Setters
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}
运行结果截图: 由于这是一个文本交互平台,无法提供实际的屏幕截图。你需要在本地环境中运行上述代码,然后根据输出查看实验结果。
注意:请确保将代码中的"/path/to/your/directory"替换为实际的文件夹路径。同时,你需要创建一个名为“source.txt”的文件作为任务1的源文件,并在相应路径下创建其他所需文件。