Java 输入输出了下的简单解压操作
来源:互联网 发布:telnet 内网ip 端口 编辑:程序博客网 时间:2024/06/07 19:18
简要介绍
**在Java学习过程中,接触到输入输出流的概念,简介了压缩与解压简单技术,实际实现解压过程遇到了一个问题,如果多个文件夹多个文档如何顺序解压。
本文以http://blog.csdn.net/isea533/article/details/7995472博客所写Java解压技术,进行总结了下,并总结过程中遇到的错误之处。**思路简析
首先声明解压文件,如上文所述如果包含多个文件夹,则存在多个解压文件进入点(Entry),则通过Enumeration(枚举)方式,循环遍历每个进入点,例如如下图1所示有两个文件夹,每次进入点路径如图2所示,通过对象强制转换到ZipEntry
,随后将目录逐层创建,如果只是单一目录文件夹,则如果不存在就将创建文件夹(在此声明,解压过程文件夹是单独创建,非解压创建),然后退出循环,不进行任何输入输出流操作。如果进入点遇到文件或文档,则将通过输入输出流方式进行解压操作。
图1:
图2:易错误点
**1、在编写过程中,错误使用了if-else if
语句,此语句如果第一个if判断正确,则不会进行else if
语句判断。
2、运行过程遇到文件夹拒绝访问错误,X:/XX拒绝访问,通过博客http://blog.csdn.net/j04110414/article/details/17795545所写才了解到,FileOutputStream使用过程中,需要注意你针对的是文件而不是文件夹,文件夹是无法进行输出操作的。
3、本次编写jdk版本为1.7+,前文所写压缩博客无法解决如果文件名为汉字,将无法正确解压,我们只要在声明ZipFile
时,指定字符集为GBK格式,则可以解决,如下:ZipFile zipFile = new ZipFile(zipfile, Charset.forName("gbk"));
**代码简析
UnZipFiles类
public class UnZipFiles { public UnZipFiles() { // TODO Auto-generated constructor stub } public static void unZipFiles(String zipFilePath, String targetDir) throws IOException { // TODO Auto-generated constructor stub unZipFiles(new File(zipFilePath), targetDir); } @SuppressWarnings("resource") public static void unZipFiles(File zipfile, String targetDir){ // TODO Auto-generated method stub File file = new File(targetDir); if(!file.exists()){ file.mkdirs(); } try { ZipFile zipFile = new ZipFile(zipfile, Charset.forName("gbk")); for (Enumeration entries = zipFile.entries(); entries.hasMoreElements();) { ZipEntry entry = (ZipEntry) entries.nextElement(); String subDir = (targetDir + entry.getName()).replace("\\", "/"); System.out.println(subDir); File subFile = new File(subDir.substring(0, subDir.lastIndexOf("/"))); if (!subFile.exists()) { subFile.mkdirs(); } if (new File(subDir).isDirectory()) { continue; } InputStream fIn = zipFile.getInputStream(entry); FileOutputStream fOut = new FileOutputStream(subDir); int b; while ((b = fIn.read()) != -1) { fOut.write(b); } fIn.close(); fOut.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
主函数:
public static void main(String[] args) throws IOException { File file = new File("f:/test.zip"); String path = "f:/jieya/"; UnZipFiles unZipFiles = new UnZipFiles(); unZipFiles.unZipFiles(file, path); }
测试成功
- Java 输入输出了下的简单解压操作
- Java中关于最简单的输入输出字节流操作
- 最简单的java输入输出
- JAVA最简单的输入输出
- Java语言的简单输入输出
- 初学Java的简单输入输出
- Java的简单输入输出问题
- java io 的简单输入输出
- java下socket的输入输出
- C++关于文件输入输出的简单操作
- java中输入输出流的简单应用
- java 输入输出操作的几点经验
- Java文件的压缩和解压操作
- Java输入输出(IO)操作
- JAVA输入输出流操作
- Java 输入输出操作
- c++重载io输入输出操作符的一个简单例子
- Linux中的输入输出管理及vim的简单操作
- java垃圾回收机制(1)
- 利用TextureView来实现拍照功能
- sql 查询结果能当查询条件用的方式
- Shape文件导Mysql
- Java对象值传递和对象传递的总结
- Java 输入输出了下的简单解压操作
- Java NIO 编程总结
- mac 下Eclipse无法Debug的问题
- 关于像素边框0.5px
- 常见浏览器兼容性问题与解决方案css篇
- Socket终结者
- HDU P2085 JAVA
- Windows第二次实验——C++复习(三)字符串
- Can't connect to local MySQL server through socket '/data/toyuanx/mysqldata/mysql.sock'