目录
题目:*17.10 (分割文件)
代码示例
输出结果
题目:*17.10 (分割文件)
假设希望在 CD-R 上备份一个大文件(例如,一个 10GB 的 AVI文件)。可以将该文件分割为几个小一些的片段,然后独立备份这些小片段。编写一个工具程序,使用下面的命令将一个大文件分割为小一些的文件:
java Exercisel7_10 SourceFile numberOfPieces
这个命令创建文件 SourceFile.1, SourceFile.2, •••, SourceFile.n, 这里的n是 numberOfPieces 而输出文件的大小基本相同。
-
代码示例
编程练习题17_10splitFile.java
package chapter_17;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
public class 编程练习题17_10splitFile {
public static void main(String[] args) throws IOException {
if (args.length != 2) {
System.out.println("Usage: java 编程练习题17_10splitFile <inputFile> <numberOfParts>");
System.exit(1);
}
File file = new File(args[0]);
int num = Integer.parseInt(args[1]);
try (RandomAccessFile raf = new RandomAccessFile(file, "r")) {
long allLength = raf.length();
long splitLength = (allLength + num - 1) / num; // 确保最后一个文件也能包含剩余内容
byte[] buffer = new byte[(int) Math.min(splitLength, Integer.MAX_VALUE)];
int fileIndex = 1;
int bytesRead;
while ((bytesRead = raf.read(buffer)) != -1) {
try (DataOutputStream output = new DataOutputStream(new FileOutputStream("Text/Exercise17_10_" + fileIndex + ".txt"))) {
output.write(buffer, 0, bytesRead); // 写入实际读取的字节数
}
fileIndex++;
}
}
}
}
-
输出结果