Java咖啡馆——一个压缩归档实用软件(4)
发表时间:2024-05-15 来源:明辉站整理相关软件相关文章人气:
[摘要]6.ZIP压缩和CRC校验 良好的开端是成功的一半,有了上面的准备,完成主程序也就很容易了。public static void main(String[] args) { // 程序出现任何异常都将打印使用信息。 try { // 记录正则表达式和路径名称。 Str...
6.ZIP压缩和CRC校验
良好的开端是成功的一半,有了上面的准备,完成主程序也就很容易了。
public static void main(String[] args) {
// 程序出现任何异常都将打印使用信息。
try {
// 记录正则表达式和路径名称。
String regex = args[1];
String targetFolder = args[0];
File path = new File(targetFolder);
ArrayList files = new ArrayList();
// 递归搜索path所指定的文件夹内以及子文件夹内满足合正则表达式。
recursiveAppend(path, files, regex);
if (files.size() == 0) {
System.out.println("找不到任何匹配的文件!");
return;
}
// 把符合正则表达式的文件压缩成ZIP格式并且返回CRC校验值。
FileOutputStream file = new FileOutputStream("Backup.zip");
CheckedOutputStream csum = new CheckedOutputStream(file, new CRC32());
ZipOutputStream zos = new ZipOutputStream(csum);
BufferedOutputStream out = new BufferedOutputStream(zos);
// 为ZIP包添加注释。
zos.setComment("Backup " + regex + " in " + targetFolder);
// 开始压缩。
for (int i = 0; i < files.size(); i++) {
String currentFile = (String) files.get(i);
System.out.println("Writing file " + currentFile);
BufferedReader in = new BufferedReader(new FileReader(currentFile));
zos.putNextEntry(new ZipEntry(currentFile));
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
}
out.close();
// 当压缩包关闭以后便可以得到CRC校验值。
System.out.println("CRC校验值:" + csum.getChecksum().getValue());
} catch (Exception e) {
printUsage();
}
}
首先可以看到,整个main函数部分是用一个大的try...catch异常捕获语句容纳起来的,当程序出现任何异常时,我们都认为是用户的参数不正确,便调用printUsage()方法打印使用信息,具体代码从略。
首先通过recursiveAppend()方法递归搜索指定的文件夹内以及子文件夹内满足合正则表达式的文件名,结果将保存在files中。如果有满足条件的文件,则把这些文件压缩成ZIP格式,并添加适当的注释。当压缩包关闭以后便可以得到ZIP包的CRC校验值。
注意,以上这些代码使用的都是Java API内置的功能,如果你在编写的过程中遇到找不到类定义的情况,别忘记使用Eclipse内置的Ctrl+Shift+M自动导入功能。
至此,整个软件全部编写好了。你可以在命令行手动输入把玩一下,或者点击Run菜单的Run...菜单项,配置Eclipse运行的参数如图2所示。