java文件压缩|如何使用java压缩文件夹成为zip包(最简单的

『壹』 如何使用java压缩文件夹成为zip包

在JDK中有一个zip工具类:

java.util.zip Provides classes for reading and writing the standard ZIP and GZIP file formats.

使用此类可以将文件夹或者多个文件进行打包压缩操作。

在使用之前先了解关键方法:

ZipEntry(String name) Creates a new zip entry with the specified name.

使用ZipEntry的构造方法可以创建一个zip压缩文件包的实例,然后通过ZipOutputStream将待压缩的文件以流的形式写进该压缩包中。具体实现代码如下:

importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;/***将文件夹下面的文件*打包成zip压缩文件**@authoradmin**/publicfinalclassFileToZip{privateFileToZip(){}/***将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下*@paramsourceFilePath:待压缩的文件路径*@paramzipFilePath:压缩后存放路径*@paramfileName:压缩后文件的名称*@return*/publicstaticbooleanfileToZip(StringsourceFilePath,StringzipFilePath,StringfileName){booleanflag=false;FilesourceFile=newFile(sourceFilePath);FileInputStreamfis=null;BufferedInputStreambis=null;FileOutputStreamfos=null;ZipOutputStreamzos=null;if(sourceFile.exists()==false){System.out.println("待压缩的文件目录:"+sourceFilePath+"不存在.");}else{try{FilezipFile=newFile(zipFilePath+"/"+fileName+".zip");if(zipFile.exists()){System.out.println(zipFilePath+"目录下存在名字为:"+fileName+".zip"+"打包文件.");}else{File[]sourceFiles=sourceFile.listFiles();if(null==sourceFiles||sourceFiles.length<1){System.out.println("待压缩的文件目录:"+sourceFilePath+"里面不存在文件,无需压缩.");}else{fos=newFileOutputStream(zipFile);zos=newZipOutputStream(newBufferedOutputStream(fos));byte[]bufs=newbyte[1024*10];for(inti=0;i<sourceFiles.length;i++){//创建ZIP实体,并添加进压缩包ZipEntryzipEntry=newZipEntry(sourceFiles[i].getName());zos.putNextEntry(zipEntry);//读取待压缩的文件并写进压缩包里fis=newFileInputStream(sourceFiles[i]);bis=newBufferedInputStream(fis,1024*10);intread=0;while((read=bis.read(bufs,0,1024*10))!=-1){zos.write(bufs,0,read);}}flag=true;}}}catch(FileNotFoundExceptione){e.printStackTrace();thrownewRuntimeException(e);}catch(IOExceptione){e.printStackTrace();thrownewRuntimeException(e);}finally{//关闭流try{if(null!=bis)bis.close();if(null!=zos)zos.close();}catch(IOExceptione){e.printStackTrace();thrownewRuntimeException(e);}}}returnflag;}publicstaticvoidmain(String[]args){StringsourceFilePath="D:\TestFile";StringzipFilePath="D:\tmp";StringfileName="12700153file";booleanflag=FileToZip.fileToZip(sourceFilePath,zipFilePath,fileName);if(flag){System.out.println("文件打包成功!");}else{System.out.println("文件打包失败!");}}}

『贰』 java 什么算法压缩文件最小

有三种方式实现java压缩:1、jdk自带的包java.util.zip.ZipOutputStream,不足之处,文件(夹)名称带中文时,出现乱码问题,实现代码如下:/*** 功能:把 sourceDir 目录下的所有文件进行 zip 格式的压缩,保存为指定 zip 文件* @param sourceDir 如果是目录,eg:D:\\MyEclipse\\first\\testFile,则压缩目录下所有文件;* 如果是文件,eg:D:\\MyEclipse\\first\\testFile\\aa.zip,则只压缩本文件* @param zipFile 最后压缩的文件路径和名称,eg:D:\\MyEclipse\\first\\testFile\\aa.zip*/public File doZip(String sourceDir, String zipFilePath) throws IOException {File file = new File(sourceDir);File zipFile = new File(zipFilePath);ZipOutputStream zos = null;try {// 创建写出流操作OutputStream os = new FileOutputStream(zipFile);BufferedOutputStream bos = new BufferedOutputStream(os);zos = new ZipOutputStream(bos);String basePath = null;// 获取目录if(file.isDirectory()) {basePath = file.getPath();}else {basePath = file.getParent();}zipFile(file, basePath, zos);}finally {if(zos != null) {zos.closeEntry();zos.close();}}return zipFile;}/*** @param source 源文件* @param basePath* @param zos*/private void zipFile(File source, String basePath, ZipOutputStream zos)throws IOException {File[] files = null;if (source.isDirectory()) {files = source.listFiles();} else {files = new File[1];files[0] = source;}InputStream is = null;String pathName;byte[] buf = new byte[1024];int length = 0;try{for(File file : files) {if(file.isDirectory()) {pathName = file.getPath().substring(basePath.length() + 1) + "/";zos.putNextEntry(new ZipEntry(pathName));zipFile(file, basePath, zos);}else {pathName = file.getPath().substring(basePath.length() + 1);is = new FileInputStream(file);BufferedInputStream bis = new BufferedInputStream(is);zos.putNextEntry(new ZipEntry(pathName));while ((length = bis.read(buf)) > 0) {zos.write(buf, 0, length);}}}}finally {if(is != null) {is.close();}}}2、使用org.apache.tools.zip.ZipOutputStream,代码如下,package net.szh.zip;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.CRC32;import java.util.zip.CheckedOutputStream;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;public class ZipCompressor {static final int BUFFER = 8192;private File zipFile;public ZipCompressor(String pathName) {zipFile = new File(pathName);}public void compress(String srcPathName) {File file = new File(srcPathName);if (!file.exists())throw new RuntimeException(srcPathName + "不存在!");try {FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());ZipOutputStream out = new ZipOutputStream(cos);String basedir = "";compress(file, out, basedir);out.close();} catch (Exception e) {throw new RuntimeException(e);}}private void compress(File file, ZipOutputStream out, String basedir) {/* 判断是目录还是文件 */if (file.isDirectory()) {System.out.println("压缩:" + basedir + file.getName());this.compressDirectory(file, out, basedir);} else {System.out.println("压缩:" + basedir + file.getName());this.compressFile(file, out, basedir);}}/** 压缩一个目录 */private void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists())return;File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {/* 递归 */compress(files[i], out, basedir + dir.getName() + "/");}}/** 压缩一个文件 */private void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {return;}try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));ZipEntry entry = new ZipEntry(basedir + file.getName());out.putNextEntry(entry);int count;byte data[] = new byte[BUFFER];while ((count = bis.read(data, 0, BUFFER)) != -1) {out.write(data, 0, count);}bis.close();} catch (Exception e) {throw new RuntimeException(e);}}}3、可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。package net.szh.zip;import java.io.File;import org.apache.tools.ant.Project;import org.apache.tools.ant.taskdefs.Zip;import org.apache.tools.ant.types.FileSet;public class ZipCompressorByAnt {private File zipFile;public ZipCompressorByAnt(String pathName) {zipFile = new File(pathName);}public void compress(String srcPathName) {File srcdir = new File(srcPathName);if (!srcdir.exists())throw new RuntimeException(srcPathName + "不存在!");Project prj = new Project();Zip zip = new Zip();zip.setProject(prj);zip.setDestFile(zipFile);FileSet fileSet = new FileSet();fileSet.setProject(prj);fileSet.setDir(srcdir);//fileSet.setIncludes("**/*.java"); 包括哪些文件或文件夹 eg:zip.setIncludes("*.java");//fileSet.setExcludes(…); 排除哪些文件或文件夹zip.addFileset(fileSet);zip.execute();}} 测试一下package net.szh.zip;public class TestZip {public static void main(String[] args) {ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");zc.compress("E:\\test");ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip");zca.compress("E:\\test");}}

『叁』 如何将java应用程序压缩成jar文件

标准情况下,在包路径的最上方写一个文件manifrest.mf,假设lz的类为test.test3,那么:manifrest.mf应该按照打包路径写:Main-Class:test.test3jar命令应该写成:jarcvfmtest.jarmanifrest.mftest/

『肆』 java中的压缩原理是什么

什么是压缩文件?简单的说,就是经过压缩软件压缩的文件叫压缩文件,压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,可以把它变成6个0的写法60,来减少该文件的空间。■怎么压缩文件?首先要安装压缩软件,现在比较流行的是WinRAR「一种高效快速的文件压缩软件(中文版)」。其次是建立一个压缩包:选择你要制作成压缩包的文件或文件夹,当然你也可也多选,方法同资源管理器,也就是按住Ctrl或Shift再选择文件(文件夹)。选取完毕之后,就可以单击工具栏上的“压缩”按钮,在这里你可以选择压缩格式:RAR和ZIP。如果你想得到较大的压缩率,建议选择RAR格式。各个选项选择好以后,单击确定按钮就开始制作压缩包了,非常方便。有时候大家会遇到这个问题,就是你在一个论坛里要上传一些文件压缩包,压缩包大小有3M,但是论坛限制会员上传大小只有2M,怎么办呢?其实办法很简单,就是在你压缩这个文件时,分成几个带分卷压缩包,分卷包大小设置为2M即可,比如:原来文件名为123.rar(3M),压缩成分卷包后为123.part1.rar(2M)与123.part2.rar(1M)两个文件,这样你就可以上传了。具体方法如下:1、在要压缩的文件上点右键2、添加到压缩文件….3、选常规4、压缩方式选最好5、批定压缩分卷大小(按字节计算),1M=1024K,1K=1024字节,填写数字即可当你下载了带有分卷的压缩包后,如何解压文件呢?具体方法如下:1、把所有的压缩分卷全部下载完整2、所有分卷必须在同一个文件夹内3、然后双击解压第一个分卷,即可注:分卷解压的文件必须是连续的,若分卷未下载完整,则解压时自然会提示需要下一压缩分卷

『伍』 如何使用java压缩文件夹成为zip包(最简单的

import java.io.File;

public class ZipCompressorByAnt {private File zipFile;/*** 压缩文件构造函数* @param pathName 最终压缩生成的压缩文件:目录+压缩文件名.zip*/public ZipCompressorByAnt(String finalFile) {zipFile = new File(finalFile);}/*** 执行压缩操作* @param srcPathName 需要被压缩的文件/文件夹*/public void compressExe(String srcPathName) {System.out.println("srcPathName="+srcPathName);File srcdir = new File(srcPathName);if (!srcdir.exists()){throw new RuntimeException(srcPathName + "不存在!");}Project prj = new Project();Zip zip = new Zip();zip.setProject(prj);zip.setDestFile(zipFile);FileSet fileSet = new FileSet();fileSet.setProject(prj);fileSet.setDir(srcdir);//fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹 eg:zip.setIncludes("*.java");//fileSet.setExcludes(…); //排除哪些文件或文件夹zip.addFileset(fileSet);zip.execute();}

}

public class TestZip {public static void main(String[] args) {ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\test1.zip ");zca.compressExe("E:\test1");} }

/*如果 出现ant 的 52 51 50 等版本问题 可以去找对应的ant-1.8.2.jar 我开始用的ant-1.10.1.jar 就是这个包版本高了 一直报verson 52 版本问题*/

『陆』 怎么java文件导出后怎么压缩文件

导出Runnabled Jar File,选择你要运行的主java类(含有main方法的java类)。导出jar包就可以运行,没有Runnabled Jar File,右键项目导出jar也可以,之间有一步是选择Main class,选择你的那个要运行的java类(含有main 方法)导出的jar包就可以运行

『柒』 java 怎么把文件压缩

用Eclipse可以将java文件打成.jar包,再用exe4打成exe文件,不过exe4貌似不是免费的,打成jar包的具体过程是File->Export->java->jar file->next->选择工程中的java文件->下面选择jar包的路径->next->main class礼选择主类->finish,就ok 了,注意,只有你的机子上安装了jre/jdk之后打出来的才是jar包,直接点击才能运行,不然打出来的是压缩包,也就是说jar包只有在装了java运行环境的机子上才可以运行

『捌』 java 如何压缩文件

楼主是说解压了来的文件大小只源有33.1MB,但是却占了51.2MB的空间吗?如果是这个意思的话,那我要告诉楼主,首先这个问题和JAVA没有关系,根据你的截图,可以断定你用的是FAT32文件系统。这只是文件存储的形式,很正常。简单的说,磁盘存储数据的最小单位是簇,比方说你的簇大小为128K,一个簇只能存放一个文件,然后你的一个文件只有16K,它占了这个簇,然后还有112K没有用,是吧。但是那112K就不能再存放其它文件了。如果要存放其它文件,就要占另一个簇。楼主,懂了吧,这跟簇的大小有关,但是也不是簇越小越好,簇越小,读写性能都有所下降。这是正常现象。如果你非觉得不舒服,那就用NTFS文件系统吧,把压缩打开,就不会有这种情况了,希望对你有帮助

『玖』 java怎样压缩文件夹

压缩文件夹代码:import java.io.File;import org.apache.tools.zip.ZipOutputStream; //这个包在ant.jar里,要到官方网下载import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.ZipInputStream;import java.util.zip.ZipEntry;public class CompressBook { public CompressBook() {} /* * inputFileName 输入一个文件夹 * zipFileName 输出一个压缩文件夹 */ public void zip(String inputFileName) throws Exception { String zipFileName = "c:\\test.zip"; //打包后文件名字 System.out.println(zipFileName); zip(zipFileName, new File(inputFileName)); } private void zip(String zipFileName, File inputFile) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); zip(out, inputFile, ""); System.out.println("zip done"); out.close(); } private void zip(ZipOutputStream out, File f, String base) throws Exception { if (f.isDirectory()) { File[] fl = f.listFiles(); out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < fl.length; i++) { zip(out, fl[i], base + fl[i].getName()); } }else { out.putNextEntry(new org.apache.tools.zip.ZipEntry(base)); FileInputStream in = new FileInputStream(f); int b; System.out.println(base); while ( (b = in.read()) != -1) { out.write(b); } in.close(); } } public static void main(String [] temp){ CompressBook book = new CompressBook(); try { book.zip("c:\\c");//你要压缩的文件夹 }catch (Exception ex) { ex.printStackTrace(); } }}

『拾』 java压缩文件的问题

如果只从你给的代码来看的话file.getName()这个方法就是来自最开头地方引入的文件import java.util.zip.ZipEntry ; zipOut.setComment("www.mldnjava.cn") ; // 设置注释压缩包里有个注释功能,就相当于备注一样,你在压缩一个包的过程中,你可以选择给它写点什么东西,以方便你根据注释想到里面的大概内容。


赞 (0)