Java IO流文件复制作业
竞赛真题一:文本文件复制(字符缓冲流)—— 最常用
题目来源:计算机二级Java考试真题 / 校内选拔赛基础题
题目描述
在指定目录下存在一个文本文件 source.txt,请编写程序将其内容完整复制到 dest.txt 文件中。要求使用字符缓冲流实现,并正确处理异常和资源释放。
输入格式
程序运行前,当前目录下已存在 source.txt 文件,包含若干行文本内容。
输出格式
程序运行后,在当前目录下生成 dest.txt 文件,内容与 source.txt 完全一致。复制成功时控制台输出"复制成功",失败时输出错误信息。
代码实现
java
import java.io.*;
public class CopyTextFile {
public static void main(String[] args) {
String source = "source.txt";
String dest = "dest.txt";
try (BufferedReader br = new BufferedReader(new FileReader(source));
BufferedWriter bw = new BufferedWriter(new FileWriter(dest))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
System.out.println("复制成功");
} catch (IOException e) {
System.out.println("复制失败:" + e.getMessage());
}
}
}
竞赛真题二:任意文件复制(字节缓冲流)—— 万能复制
题目来源:Java竞赛经典题 —— "万能文件复制器"
题目描述
编写一个Java程序,接收两个命令行参数:源文件路径和目标文件路径。要求将源文件内容完整复制到目标文件,必须支持任何类型文件(图片、视频、压缩包、可执行文件等),并使用缓冲技术保证读写性能。
输入格式
程序运行时传入两个命令行参数:
args[0]:源文件路径
args[1]:目标文件路径
输出格式
复制成功时控制台输出"复制成功",失败时输出相应错误信息。
补充问题(竞赛常见附加题)
如果改用字符缓冲流实现本题,复制图片文件会出现什么问题?为什么?
代码实现
java
import java.io.*;
public class UniversalCopy {
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("用法:java UniversalCopy <源文件> <目标文件>");
return;
}
String source = args[0];
String dest = args[1];
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest))) {
byte[] buffer = new byte[8192]; // 8KB缓冲区
int len;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
System.out.println("复制成功");
} catch (FileNotFoundException e) {
System.out.println("文件不存在:" + source);
} catch (IOException e) {
System.out.println("复制失败:" + e.getMessage());
}
}
}
运行示例
bash
javac UniversalCopy.java
java UniversalCopy flower.jpg copy_flower.jpg
总结
字符缓冲流(BufferedReader / BufferedWriter)
适用范围:仅文本文件
特点:按行读写,支持中文,效率高
推荐用途:文本文件复制的首选方案
字节缓冲流(BufferedInputStream / BufferedOutputStream)
适用范围:任意文件(包括文本、图片、视频、压缩包等)
特点:不关心文件内容,直接操作字节,万能通用
推荐用途:所有类型文件的通用复制方案
注意事项
字符缓冲流不能用于图片、视频等二进制文件,否则会损坏数据。
字节缓冲流可以复制任何文件,包括文本文件,是最稳妥的万能方案。
使用缓冲流比普通流效率更高,是日常开发中的标准做法。
使用 try-with-resources 可以确保流自动关闭,避免资源泄露。
浙公网安备 33010602011771号