本帖最后由 小歪 于 2014-3-27 12:20 编辑
文件夹压缩以及解压缩
任务要求: 利用Java代码,将 F盘下的 itheima文件夹以及子文件 压缩为 *.zip 格式,并命名为 黑马程序员 。
代码如下:
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipOutputStream;
- import java.io.FileInputStream;
- public class ZipFileTest {
- public static void main(String args[])throws Exception //所有异常抛出
- {
- File file=new File("F:"+File.separator+"itheima"); //定义 所要压缩文件路径
- File zipFile=new File("F:"+File.separator+"黑马程序员.zip"); //定义 文件夹压缩后路径以及名称
- InputStream input=null; //定义文件输入流
- ZipOutputStream zipOut=null; //定义压缩文件输出流
- zipOut=new ZipOutputStream(new FileOutputStream(zipFile));
-
- zipOut.setComment("<www.itheima.com>"); //设置压缩文件注释
-
- if(file.isDirectory()) //判断是否是路径 (及文件夹)
- {
- File lists[]=file.listFiles(); //列出全部文件
-
- for(int i=0;i<lists.length;i++) //分别对文件夹内文件进行压缩
- {
- input =new FileInputStream(lists[i]); //重复设置文件输入流
-
- //每个被压缩的文件都用ZipEntry表示,需要为每个压缩后文件设置名称
- zipOut.putNextEntry(new ZipEntry(file.getName()+File.separator+lists[i].getName()));
- int temp=0;
- while((temp=input.read())!=-1) //直到文件内容读取完停止循环
- {
- zipOut.write(temp);
- }
- input.close(); //关闭输入流
- }
- }
- zipOut.close(); //关闭压缩输出流
- }
- }
复制代码
运行结果:
压缩文件中内容也没有问题:
小结:以上代码将itheima文件夹的内容压缩为 “黑马程序员.zip” 文件。程序首先判断给定的路径是否正确,如果文件夹存在,则将此文件夹中的所有内容使用 listFiles()方法全部列出,此方法返回File的对象数组,然后将此File对象数组中每个文件进行压缩,每次压缩时都要设置一个新的 ZipEntry对象。
----------------------------------------(囧) (囧)(囧)我是无奈的分隔符(囧)(囧)(囧)-------------------------------------
那么,既然Java可以将文件夹打成压缩包,自然也可以解压文件喽 :hug: :hug: :hug: :hug: :hug: :hug: :hug: :hug:
:hug: :hug: :hug: :hug: :hug: :hug: :hug: :hug: 接下来我们就将上图中的“黑马程序员.zip” 压缩文件进行解压操作
(~~~~~~~将““黑马程序员.zip”压缩文件解压 到D盘(为了与原文件区分开)~~~~~~~~)
代码如下:
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
- import java.util.zip.ZipInputStream;
- public class UnZipFileTest {
- public static void main(String args[])throws Exception //为了代码清晰度,暂时抛出所有异常
- {
- File file=new File("F:"+File.separator+"黑马程序员.zip"); //找到需要进行解压缩的文件
- File outFile=null; //现定义好用于输出的文件对象
- ZipFile zipFile=new ZipFile(file); //实例化ZipFile对象
- ZipInputStream zipInput=new ZipInputStream(new FileInputStream(file)); //实例化ZIP输入流
- ZipEntry entry=null; //定义一个ZipEntry对象,用于接受压缩文件中的每一个实体(即:文件)
- InputStream input=null; //定义输入流,用于读取当前文件(entry)中的内容
- OutputStream output=null; //定义输出流,将读取到的文件内容输出到另一个文件中
- int i=0;
-
- while((entry=zipInput.getNextEntry())!=null) //获得压缩文件夹中的子文件,直到末尾结束
- {
- System.out.println("子文件"+(++i)+": "+entry.getName()); //测试下是否获得子文件
- outFile=new File("D:"+File.separator+entry.getName()); //实例化输出文件
-
- if( !(outFile.getParentFile().exists()) ) //判断当前文件的父文件(即:文件夹)是否存在 ,不存在则需要创建,存在则直接解压
- {
- outFile.getParentFile().mkdir(); //创建文件夹
- }
-
- if(!(outFile.exists())) //判断文件是否存在,不存在则创建,存在则写入
- {
- outFile.createNewFile(); //创建文件
- }
-
- input=zipFile.getInputStream(entry); //得到压缩文件的输入流
- output=new FileOutputStream(outFile); //实例化输出流对象(用于写入文件内容)
- int temp=0;
- while((temp=input.read())!=-1) //开始读取当前文件中内容,直到文件末尾
- {
- output.write(temp); //写入压缩后文件
- }
- input.close();
- output.close();
- //关闭输入、输出流
- }
- }
- }
复制代码
让我们看看运行结果:
让我们再来看看D盘:
当然内部文件也没有问题:
小结 :以上程序是将F盘中 “黑马程序员.zip”压缩文件解压到D盘根目录,首先使用ZipInputStream读取zip格式文件,然后通过getNextEntry()方法依次读取其中的每个ZipEntry对象(即:子文件),并通过ZipFile类取得每个ZipEntry的输入流对象,并在进行文件输出前,判断下输出文件及父文件是否存在,如果不存在则需要创建。
|