admin 管理员组文章数量: 1184232
Java便捷式处理后缀为(.zip或.rar)的压缩文件
.zip文件读取操作
从文件系统中读取一个名为
"
F:\\1001.zip
"
的文件
尝试每次读取1个字节的数据块,输出每次读取的字节数
(1)创建一个
FileInputStream
对象来读取该文件,使用try-catch块捕获异常处理
(2)使用
FileInputStream
对象的read()方法进行对压缩包的读取操作。
** 注 意 : int data = -1;用于存储每次从文件中读取的字节。初始值设为-1,因为文件读取结束时的返回值也是-1。
尝试每次读取128个字节的数据块,输出读取到的字节数组的内容
(1)初始化一个字节数组
buff
,大小为128字节,用于存储每次从文件中读取的数据
(2)进入一个循环,使用
in.read(buff)
方法尝试从文件中读取最多128个字节到
buff
数组中。该方法返回实际读取的字节数,如果到达文件末尾,则返回-1
(3)在循环内部,使用
System.out.printf
输出每次读取的字节数(
len
)和整个
buff
数组的内容(使用
Arrays.toString(buff)
转换)
.zip文件解压缩操作
(1)根据原始路径(字符串),创建源文件(File对象)
(2)源文件调用getName()方法获取文件名,再利用File类创建根目录rir使其与压缩文件在同一目录下,并利用substring()方法对文件名进行截取,去除后缀,完成创建解压后的同名空目录文件夹。
(3)rootDir调用exists()方法、mkdir()方法判断解压文件夹是否存在,没有则创建,有则删除重新创建。
**注意: 此时已完成解压操作,但解压完后的文件内无内容,仍需进行将压缩包里的内容写进此中!!
(1)使用ZipInputStream进行对zip格式的压缩文件输入流,遍历压缩包中的每个子目录或者子文件,获取其名称并创建(目录则创建子目录,文件则创建子文件)。
(2)通过FileOutputStream的对象读取当前压缩包里的文件,并通过输出流写入新子文件中。
.rar文件解压缩操作
**注意: 同解压缩.zip的文件步骤大致相同,略微处注意!!
(1)创建解压缩的根目录rootDir,并判断其是否已经存在,存在则删除,并创建新的rootDir。
(2).zip用的是ZipEntry进行对压缩包每个子目录或子文件的遍历,而.rar通过创建Archive压缩包对象,用来读取rar压缩文件格式,用FileHeader对象来获取压缩文件中的所有子目录或子文件。
(3)通过调用sort方法,对子目录或者子文件进行排序。用for循环遍历子目录或子文件,并根据类型不同调用不同的创建方法。
(4)从压缩包中获取一个子文件的输入流,
getInputStream(fd)
方法返回一个
InputStream
对象,可以使用这个对象来读取压缩包中的子文件。并使用
Apache Commons IO
库中的
FileUtils
类来复制输入流
in
(即压缩包中的子文件)到一个新文件
f。
**注意 :一定要记得catch块中的抛出异常,否则程序会报错!!!
案例(作业抄袭)分析:
对于提交的两个作业进行审核,查看是否有抄袭的可能存在?
思路: 通过计算两个文件的哈希值,并转换成16进制后进行比较,若相同,则可能会抄袭。
(1)读取路径1、2对应文件的所有字节数据。
(2)
MessageDigest
是 Java 提供的一个用于计算消息摘要(哈希值)的类,通过调用Message
.
getDigest
类的
getInstance
方法,并传入"md5"作为参数,来获取一个 MD5 算法的实例。
(3)M
essageDigest
使用
update
方法将输入的字节数组
bytes
更新到要计算的消息摘要中,通过调用
digest
方法,计算输入数据的哈希值,并将结果存储在字节数组
hashBytes
中。
(4)通过一个循环遍历
hashBytes
数组,并使用
String.format("%02x", b)
将每个字节转换为两位十六进制数。通过
ret.toString()
将
StringBuilder
对象转换为字符串,并返回该字符串作为方法的输出。
案例分析2(是否有重复文件):
(1)在
main
方法中,使用
Files.walkFileTree
方法遍历指定目录下的所有文件和目录
(2)自定义文件访问器
MyFileVisitor
继承自
SimpleFileVisitor<Path>
,
并重写了
visitFile
方法来处理遍历到的每个文件
(3)使用
HashMap<String,Path>
来存储每个哈希值及其对应的文件路径。如果
map.put(hash,file)
返 回 非 空,说明之前已经有文件具有相同的哈希值,即找到了重复的文件。 如果找到重复的文件,就打印出这两个文件的路径。
压缩文件.zip
(1)创建所在目录,调用listFiles()方法遍历所有原始子文件。
(2)通过ZipOutStream创建zip压缩文件的输出流,并写一个for循环,用来将原始文件写入一个压缩包中的子文件,并通过对象调用write()方法写入字节内容,并捕获异常。
**注意: 使用完后要关闭压缩包中的内容。
版权声明:本文标题:Flash迷必备:深入解析SWF文件与Adobe Flash Player的完美搭配 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1774500094a3571875.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论