使用JavaTMAPI压缩和解压缩数据
java metadata 获取压缩算法
Java Metadata 获取压缩算法1. 简介在Java中,元数据(Metadata)是指描述Java程序中类、方法、字段等各种元素的数据。
通过获取元数据,我们可以了解到程序的结构、属性和特征,帮助我们更好地理解和操作程序。
压缩算法是一种用于减小数据体积的算法,通过去除数据中的冗余信息以及使用更高效的编码方式,从而实现数据的压缩。
在Java中,我们可以使用元数据来获取压缩算法的相关信息,包括压缩算法的名称、支持的压缩格式、压缩级别等。
本文将介绍如何使用Java元数据获取压缩算法的相关信息,并且提供一些常见的压缩算法作为示例。
2. 获取压缩算法Java提供了java.util.zip包来支持压缩和解压缩操作。
在该包中,Deflater和Inflater类分别用于压缩和解压缩数据,而DeflaterInputStream和InflaterInputStream类则用于从输入流中读取压缩和解压缩的数据。
要获取压缩算法的相关信息,我们可以使用Deflater类的静态方法getHeaderStr()来获取所有支持的压缩算法的名称和参数。
以下是一个示例代码:import java.util.zip.Deflater;public class CompressionAlgorithm {public static void main(String[] args) {String[] algorithms = Deflater.getHeaderStr().split(", ");for (String algorithm : algorithms) {System.out.println(algorithm);}}}运行以上代码,我们将得到输出结果,其中包含了所有支持的压缩算法的名称,例如:DEFLATEDBEST_SPEEDBEST_COMPRESSION3. 常见压缩算法下面介绍几种常见的压缩算法,并提供示例代码以演示其用法。
java中压缩文件并下载的实例详解
java中压缩⽂件并下载的实例详解当我们对⼀些需要⽤到的资料进⾏整理时,会发现⽂件的内存占⽤很⼤,不过是下载或者存储,都不是很⽅便,这时候我们会想到把⽂件变成zip格式,即进⾏压缩。
在正式开始压缩和下载⽂件之前,我们可以先对zip的格式进⾏⼀个了解,然后再就具体的⽅法给⼤家带来分享。
1、ZIP⽂件格式[local file header + file data + data descriptor]{1,n} + central directory + end of central directory record即[⽂件头+⽂件数据+数据描述符]{此处可重复n次}+核⼼⽬录+⽬录结束标识当压缩包中有多个⽂件时,就会有多个[⽂件头+⽂件数据+数据描述符]2、压缩和下载步骤(1)创建压缩包前准备//定义压缩包存在服务器的路径String path = request.getSession().getServletContext().getRealPath("/WEB-INF/fileTemp");//创建路径File FilePath = new File(path + "/file");if (!FilePath.exists()) {FilePath.mkdir();}String path = FilePath.getPath() + "/";//定义导出压缩包的名称String title ="问价压缩包";//压缩包格式String fileNamezip = title + ".zip";String zipPath = path + fileNamezip;//创建⼀个ZIP输出流并实例化缓冲区域ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipPath)));//设置编码格式(解决linux出现乱码)out.setEncoding("gbk");//定义字节数组byte data[] = new byte[2048];//获取⽂件记录(获取⽂件记录代码省略)List FileList =。
Java压缩解压zip技术
Java压缩解压zip技术
Java解压缩zip - 多个文件(包括文件夹),对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。
压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面...
测试文件目录结构:
测试的压缩内容:English文件夹和同级的两个excel文件
下面是压缩的代码:
在压缩的时候,针对文件夹进行判断,然后递归压缩文件。
然后是解压:
解压的时候,针对文件夹判断创建不存在的文件夹,对文件夹只创建,不进行解压..因为解压是针对文件的,不是文件夹,文件夹需要自己创建。
测试方法:
测试方法并没有对异常做任何处理,这是不对的,请不要模仿。
输出结果:
本文作者:isea533。
java 通过算法压缩字符串的方法
java 通过算法压缩字符串的方法
在Java中,可以使用各种算法来压缩字符串。
一种常见的方法是使用Huffman 编码,这是一种基于字符频率的压缩方法。
以下是使用Huffman编码压缩字符串的
基本步骤:
1.创建一个优先队列:在这个队列中,每个节点都代表一个字符及其在输入字符串中
的频率。
2.构建Huffman树:从优先队列中取出两个频率最低的节点,将它们合并成一个新的
节点,并将这个新节点放回队列中。
重复这个过程,直到队列中只剩下一个节点,这个节点就是我们的Huffman树的根节点。
3.为每个字符分配一个码字:从Huffman树的根节点开始,对于每个节点,如果它是
左子节点,则分配一个'0'作为码字;如果是右子节点,则分配一个'1'作为码字。
4.压缩字符串:对于输入字符串中的每个字符,使用其对应的码字替换它。
5.解压缩字符串:使用相同的码字还原字符。
对于每个码字,从Huffman树的根节点
开始,根据码字的二进制表示,向左或向右移动到相应的子节点,直到到达一个叶子节点,这个叶子节点的字符就是解压出的字符。
需要注意的是,这种方法只能压缩可打印的ASCII字符,对于非ASCII字符或
二进制数据,可能需要使用其他方法。
另外,这种方法也不能保证总是能获得比原始字符串更小的输出,尤其是在输入字符串非常短或所有字符频率大致相同时。
JAVA自带API的压缩与解压
JAVA⾃带API的压缩与解压Java API中的 java.util.zip.*;包下包含了Java对于压缩⽂件的所有相关操作。
我们可以使⽤该包中的⽅法,结合IO中的相关知识,进⾏⽂件的压缩和解压缩相关操作。
ZipFilejava中的每⼀个压缩⽂件都是可以使⽤ZipFile来进⾏表⽰的。
1. File file = new File("F:/zippath.zip");2. ZipFile zipFile = new ZipFile(file);3. System.out.println("压缩⽂件的名称为:" + zipFile.getName());压缩单个⽂件1. /** 压缩单个⽂件*/2. public static void ZipFile(String filepath ,String zippath) {3. try {4. File file = new File(filepath);5. File zipFile = new File(zippath);6. InputStream input = new FileInputStream(file);7. ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));8. zipOut.putNextEntry(new ZipEntry(file.getName()));9. int temp = 0;10. while((temp = input.read()) != -1){11. zipOut.write(temp);12. }13. input.close();14. zipOut.close();15. } catch (Exception e) {16. e.printStackTrace();17. }18. }应⽤:ZipFile("d:/hello.txt", "d:/hello.zip");压缩多个⽂件(⽂件夹)1. /** ⼀次性压缩多个⽂件,⽂件存放⾄⼀个⽂件夹中*/2. public static void ZipMultiFile(String filepath ,String zippath) {3. try {4. File file = new File(filepath);// 要被压缩的⽂件夹5. File zipFile = new File(zippath);6. InputStream input = null;7. ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));8. if(file.isDirectory()){9. File[] files = file.listFiles();10. for(int i = 0; i < files.length; ++i){11. input = new FileInputStream(files[i]);12. zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));13. int temp = 0;14. while((temp = input.read()) != -1){15. zipOut.write(temp);16. }17. input.close();18. }19. }20. zipOut.close();21. } catch (Exception e) {22. e.printStackTrace();23. }24. }应⽤:ZipMultiFile("f:/uu", "f:/zippath.zip");解压缩单个⽂件1. /** 解压缩(解压缩单个⽂件)*/2. public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {3. try {4. File file = new File(zippath);//压缩⽂件路径和⽂件名5. File outFile = new File(outfilepath);//解压后路径和⽂件名6. ZipFile zipFile = new ZipFile(file);7. ZipEntry entry = zipFile.getEntry(filename);//所解压的⽂件名8. InputStream input = zipFile.getInputStream(entry);9. OutputStream output = new FileOutputStream(outFile);10. int temp = 0;11. while((temp = input.read()) != -1){12. output.write(temp);13. }14. input.close();15. output.close();16. } catch (Exception e) {17. e.printStackTrace();18. }19. }应⽤:ZipContraFile("d:/hello.zip","d:/eee.txt", "hello.txt");解压缩多个⽂件ZipInputStream类:当我们需要解压缩多个⽂件的时候,ZipEntry就⽆法使⽤了。
如何在Java中进行文件的压缩和解压缩
如何在Java中进行文件的压缩和解压缩在Java中进行文件的压缩和解压缩是常见的操作,可以使用Java 标准库提供的功能来实现。
本文将介绍如何使用Java中的ZipOutputStream来进行文件压缩,以及使用ZipInputStream来进行文件解压缩。
一、文件的压缩文件的压缩是将一个或多个文件或文件夹打包成一个压缩文件,压缩文件通常使用.zip格式。
在Java中,可以使用ZipOutputStream 来创建一个新的压缩文件,并将文件添加到压缩文件中。
1.创建压缩文件要使用ZipOutputStream创建一个新的压缩文件,首先需要创建一个FileOutputStream来写入文件的数据。
然后将FileOutputStream 传递给ZipOutputStream的构造函数,以创建一个与特定文件关联的ZipOutputStream。
```javaFileOutputStream fos = newFileOutputStream("compressed.zip");ZipOutputStream zos = new ZipOutputStream(fos);```上述代码中,我们创建了一个名为compressed.zip的压缩文件,并将其关联到一个FileOutputStream中。
接下来,我们将使用ZipOutputStream对象向文件中添加数据。
2.向压缩文件中添加文件要向压缩文件中添加一个文件,可以使用ZipEntry和putNextEntry方法。
ZipEntry表示压缩文件中的一个条目,我们可以通过ZipEntry的构造函数来创建一个新的条目,并使用putNextEntry 方法来指定下一个要添加数据的条目。
```javaFile fileToAdd = new File("fileToAdd.txt");ZipEntry zipEntry = new ZipEntry(fileToAdd.getName());zos.putNextEntry(zipEntry);//将fileToAdd的数据写入到压缩文件中FileInputStream fis = new FileInputStream(fileToAdd);byte[] buffer = new byte[1024];int length;while ((length = fis.read(buffer)) > 0) {zos.write(buffer, 0, length);}//关闭当前条目zos.closeEntry();fis.close();```在上述代码中,我们首先创建一个ZipEntry来表示将要添加的文件,然后使用putNextEntry方法指定下一个要添加数据的条目。
使用Java?API压缩和?解压缩数据
使⽤Java?API压缩和?解压缩数据使⽤Java API压缩和解压缩数据(2007-09-24 09:29:52)转载标签:学习公社分类:⼯作参考⽂档从ZIP⽂件解压并抽取数据java.util.zip包提供了数据压缩和解压缩的类。
解压ZIP⽂件实质是从输⼊流中读出数据。
java.util.zip包提供了读取ZIP⽂件的ZipInputStream类。
可以像任何其他输⼊流那样创建ZipInputStream。
例如,下列代码可⽤于创建输FileInputStream fis = new FileInputStream("figs.zip"); ZipInputStream zin = new ZipInputStream(new BufferedInputStream(fis));⼀旦打开ZIP输⼊流,就可以使⽤getNextEntry⽅法读取zip条⽬,该⽅法返回ZipEntry对象。
如果到达⽂件末尾,getNextEntry就会返回零值:ZipEntry entry; while((entry = zin.getNextEntry()) != null) { // extract data // open output streams }现在创建解压缩输出流,如下:int BUFFER = 2048; FileOutputStream fos = new FileOutputStream(entry.getName()); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);注意: 在此节代码中,我们⽤BufferedOutputStream代替了ZIPOutputStream。
ZIPOutputStream和GZIPOutputStream使⽤⼤⼩为 512 的内部缓冲。
BufferedOutputStream的使⽤仅在缓冲的⼤⼩远远超过 512 时(本例的设置为在本节代码中,⽂件输出流是使⽤条⽬的名称创建的,该名称可以使⽤entry.getName⽅法进⾏检索。
java解压代码
java解压代码Java中的文件压缩和解压缩是非常常见的操作,它对于压缩和解压缩文件的大小和传输速度起着很大的作用。
Java中提供了一些类用于文件压缩和解压缩,例如ZipInputStream、ZipOutputStream和GZIPInputStream、GZIPOutputStream等等。
这些类使用起来非常简单,只需要了解其基本用法就可以轻松实现文件的压缩和解压缩,下面就来详细了解一下Java解压代码的实现方法。
1. ZipInputStream和ZipOutputStreamZipInputStream和ZipOutputStream可以用来压缩和解压缩Zip格式的文件,Zip格式是一种非常常见的文件格式,它可以用来打包多个文件,节省空间并且便于传输。
下面是一个简单的例子,演示如何使用ZipInputStream和ZipOutputStream来解压和压缩Zip格式的文件://解压缩文件public static void unzip(String zipFilePath, String destDirectory) throws IOException {File destDir = new File(destDirectory);if (!destDir.exists()) {destDir.mkdir();}ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));ZipEntry entry = zipIn.getNextEntry();while (entry != null) {String filePath = destDirectory + File.separator + entry.getName();if (!entry.isDirectory()) {//如果是文件则直接写入文件BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));byte[] bytesIn = new byte[4096];int read = 0;while ((read = zipIn.read(bytesIn)) != -1) { bos.write(bytesIn, 0, read);}bos.close();} else {//如果是文件夹则创建文件夹File dir = new File(filePath);dir.mkdir();}zipIn.closeEntry();entry = zipIn.getNextEntry();}zipIn.close();}//压缩文件public static void zip(String sourceDirectory, String zipFilePath) throws IOException {ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath));File fileToZip = new File(sourceDirectory);zipFile(fileToZip, fileToZip.getName(), zipOut);zipOut.close();}private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { if (fileToZip.isHidden()) {return;}if (fileToZip.isDirectory()) {if (fileName.endsWith("/")) {zipOut.putNextEntry(new ZipEntry(fileName));zipOut.closeEntry();} else {zipOut.putNextEntry(new ZipEntry(fileName + "/"));zipOut.closeEntry();}File[] children = fileToZip.listFiles();for (File childFile : children) {zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);}return;}FileInputStream fis = new FileInputStream(fileToZip);ZipEntry zipEntry = new ZipEntry(fileName);zipOut.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zipOut.write(bytes, 0, length);}fis.close();}使用ZipInputStream和ZipOutputStream时需要注意以下事项:-每个ZipEntry代表一个文件或者文件夹,ZipInputStream先返回文件夹的信息,再返回文件的信息。
Java压缩解压应用
Java解压与压缩应用在Web应用中,可用到批量附件上传,我们可以通过flash控件来实现,当然也可以通过压缩解压来实现。
下面应用示例介绍压缩与解压的实现过程。
供大家参考学习1.依赖于ant-1.7.1.jar,把此jar导入到应用的工程项目中:2.代码示例:package com.lrm.study.zip;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import org.apache.tools.zip.ZipOutputStream;/************************************************************************** Java解压与压缩文件java提供的java.util.zip.*.......对中文不支持.但可能通过ZipOutputStream 来解决这个问题.* 下面就是一个简单的例子,注需要导入ant.jar支持包** @author lrm**/public class JavaAntZipApp {/*** @Create on Nov 3, 2009 by lrm*/public static void main(String[] args) {// TODO Auto-generated method stubJavaAntZipApp jaza = new JavaAntZipApp();String inputFileName = "E://我的收藏//JAVA APLLICATION//Java压缩与解压应用";// 要压缩的文件名try {// 压缩// jaza.zip(inputFileName);// 解压jaza.unZip("D:\\test\\生化试剂报价表.zip", "D:\\解压测试目录");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*************************************压缩********************************** */ public void zip(String inputFileName) throws Exception {String zipFileName = "d:\\批量打包测试.zip";// 打包后文件名字System.out.println(zipFileName);zip(zipFileName, new File(inputFileName));}private void zip(String zipFileName, File inputFile){ZipOutputStream out =null;try {out = new ZipOutputStream(new FileOutputStream(zipFileName));zip(out, inputFile, "");} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println("zip done");}private void zip(ZipOutputStream out, File f, String base) {FileInputStream in = null;if (f.isDirectory()) {File[] fl = f.listFiles();System.out.println("新增目录元素" + base + "/");try {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());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {System.out.println("新增普通文件元素" + base);try {out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));in = new FileInputStream(f);int b;while ((b = in.read()) != -1) {out.write(b);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}/*******************************解压******************************************** */ private void createDirectory(String directory, String subDirectory) { String dir[];File fl = new File(directory);try {// 如果解压文件基本目录结构不存在,新建if (subDirectory == "" && fl.exists() != true) {// System.out.println("*******创建基本目录结构*******"+directory);fl.mkdir();}// 主要创建子目录else if (subDirectory != "") {dir = subDirectory.replace('\\', '/').split("/");for (int i = 0; i < dir.length; i++) {File subFile = new File(directory + File.separator + dir[i]);if (subFile.exists() == false) {// System.out.println("*******创建子目录*******"+directory +// File.separator + dir[i]);subFile.mkdir();}directory += File.separator + dir[i];}}} catch (Exception ex) {System.out.println(ex.getMessage());}}/**************************************************************************** @param zipFileName* 压缩文件名及路径; outputDirectory 被解压到的文件目录* @Create on Nov 3, 2009 by lrm*/public void unZip(String zipFileName, String outputDirectory)throws Exception {InputStream in = null;FileOutputStream out = null;try {org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(zipFileName);java.util.Enumeration e = zipFile.getEntries();org.apache.tools.zip.ZipEntry zipEntry = null;createDirectory(outputDirectory, "");while (e.hasMoreElements()) {zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement();System.out.println("========== 解压========== "+ zipEntry.getName());// 判断是否为一个文件夹if (zipEntry.isDirectory()) {String name = zipEntry.getName().trim();// 因为后面带有一个/,所有要去掉name = name.substring(0, name.length() - 1);File f = new File(outputDirectory + File.separator + name);if (!f.exists()) {f.mkdir();}// System.out.println("*******创建根目录*******" +// outputDirectory + File.separator + name);} else {String fileName = zipEntry.getName();fileName = fileName.replace('\\', '/');// 判断子文件是否带有目录,有创建,没有写文件if (fileName.indexOf("/") != -1) {createDirectory(outputDirectory, fileName.substring(0,stIndexOf("/")));fileName = fileName.substring(stIndexOf("/") + 1);}File f = new File(outputDirectory + File.separator+ zipEntry.getName());f.createNewFile();in = zipFile.getInputStream(zipEntry);out = new FileOutputStream(f);byte[] by = new byte[1024];int c;while ((c = in.read(by)) != -1) {out.write(by, 0, c);}}}} catch (Exception ex) {System.out.println(ex.getMessage());} finally {in.close();out.close();}System.out.println("^^^^^^^^^^ 解压完成^^^^^^^^^^");}}。
Java中的文件压缩与解压缩方法
Java中的文件压缩与解压缩方法在日常的开发工作中,文件的压缩与解压缩是一个常见的需求。
Java作为一种广泛使用的编程语言,提供了丰富的类库和方法来实现这一功能。
本文将介绍Java中常用的文件压缩与解压缩方法,并探讨它们的优缺点以及适用场景。
一、文件压缩方法1. Zip压缩Zip是一种常见的文件压缩格式,Java提供了java.util.zip包来实现对Zip文件的压缩和解压缩操作。
使用Zip压缩文件可以将多个文件或文件夹打包成一个压缩文件,方便传输和存储。
在Java中,可以使用ZipOutputStream类来创建一个Zip文件,并使用ZipEntry类来表示Zip文件中的每个文件或文件夹。
下面是一个简单的示例代码:```javaimport java.io.*;import java.util.zip.*;public class ZipUtil {public static void zipFile(String sourceFilePath, String zipFilePath) {try {FileOutputStream fos = new FileOutputStream(zipFilePath);ZipOutputStream zos = new ZipOutputStream(fos);File file = new File(sourceFilePath);zipFile(file, file.getName(), zos);zos.close();fos.close();} catch (IOException e) {e.printStackTrace();}}private static void zipFile(File file, String fileName, ZipOutputStream zos) throws IOException {if (file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {zipFile(f, fileName + "/" + f.getName(), zos);}} else {FileInputStream fis = new FileInputStream(file);ZipEntry zipEntry = new ZipEntry(fileName);zos.putNextEntry(zipEntry);byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {zos.write(buffer, 0, len);}fis.close();}}}```上述代码中,zipFile方法用于递归压缩文件夹中的所有文件和子文件夹。
java压缩文件解压:调用WinRAR5命令强于自己写代码实现
java压缩⽂件解压:调⽤WinRAR5命令强于⾃⼰写代码实现最近,⼿上维护着⼀个⼏年前的系统,技术是⽤的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是⽤java实现的1、解压rar格式,采⽤的是java-unrar-0.3.jar2、解压zip格式,采⽤的是commons-compress-1.4.1.jar但最近根据⽤户反馈的问题,发现系统存在两个关于压缩⽂件解压的问题:1、有些压缩⽂件解压之后出现中⽂乱码;2、有些压缩⽂件根本不能解压为了弥补上述两个问题,在之前代码的基础上打了⼀些补丁,来解决zip压缩包乱码的问题,思路⼤概是:1、采⽤GBK编码解压2、递归遍历解压的⽂件名是否存在中⽂乱码,这⽤到了⽹上很常⽤的中⽂检测正则表⽰式,[\u4e00-\u9fa5]+3、如果存在中⽂乱码,则采⽤UTF-8编码解压替换后,还是有⼈反映乱码问题,烦~~~第⼆个问题报错如下(出现在有些rar格式解压时):WARNING: exception in archive constructor maybe file is encrypted or curruptde.innosystec.unrar.exception.RarException: badRarArchiveat de.innosystec.unrar.Archive.readHeaders(Archive.java:238)at de.innosystec.unrar.Archive.setFile(Archive.java:122)at de.innosystec.unrar.Archive.<init>(Archive.java:106)at de.innosystec.unrar.Archive.<init>(Archive.java:96)at com.reverse.zipFile.CopyOfZipFileUtil.unrar(CopyOfZipFileUtil.java:242)at com.reverse.zipFile.CopyOfZipFileUtil.main(CopyOfZipFileUtil.java:303)借助百度、⾕歌找资料发现:1、java解压⽂件有两种⽅式,⼀是⾃⼰写代码,⼆是调⽤压缩软件CMD执⾏2、第⼆个错误是由于WinRAR5之后,在rar格式的基础上,推出了另⼀种rar,叫RAR5,⽽java-unrar解析不了这种格式查看rar格式属性可以通过右键 —> 属性查看,如图因此需要舍弃代码解压的⽅式,改为CMD调⽤的⽅式,虽然压缩软件有很多,但从⽹上能找到执⾏命令的,也就WinRAR了,所以我们采⽤WinRAR5之后的版本解决,5之前的版本肯定是不⾏的了使⽤cmd⽅式效果如何呢?既能解决中⽂乱码问题,⼜能解压RAR5压缩⽂件,⽽且代码量还更少了,⽀持的格式也更多了。
如何在Java中进行文件压缩和解压缩操作
如何在Java中进行文件压缩和解压缩操作文件压缩和解压缩是程序开发中常见的操作,通过压缩可以减小文件的大小,节省存储空间,并且可以快速传输文件。
Java中提供了多种压缩和解压缩文件的方式,如ZipOutputStream和ZipInputStream等类。
本文将详细介绍在Java中进行文件压缩和解压缩的操作步骤和示例代码。
一、文件压缩文件压缩是将一个或多个文件打包成一个压缩文件,常见的压缩文件格式包括zip、tar、gz等。
在Java中,通常使用ZipOutputStream类实现文件压缩操作。
ZipOutputStream类是用于写入ZIP文件的输出流。
1.创建ZipOutputStream对象首先需要创建一个ZipOutputStream对象,用于写入ZIP文件。
可以通过FileOutputStream将ZipOutputStream链接到一个文件,然后就可以向文件中写入压缩数据。
```javaFileOutputStream fos = newFileOutputStream("compressed.zip");ZipOutputStream zos = new ZipOutputStream(fos);```2.添加文件到压缩文件接下来需要将要压缩的文件添加到ZipOutputStream中。
可以通过ZipEntry对象表示压缩文件中的每个文件或目录,并使用putNextEntry方法将文件添加到压缩文件中。
```javaFile file1 = new File("file1.txt");ZipEntry entry1 = new ZipEntry(file1.getName());zos.putNextEntry(entry1);FileInputStream fis1 = new FileInputStream(file1);byte[] buffer = new byte[1024];int length;while ((length = fis1.read(buffer)) > 0) {zos.write(buffer, 0, length);}zos.closeEntry();fis1.close();```3.完成压缩完成文件的添加后,需要关闭ZipOutputStream,以确保压缩文件保存到磁盘。
java api 使用教程
java api 使用教程Java API是Java语言提供的应用程序接口(Application Programming Interface),可以用于开发各种类型的应用程序。
Java API提供了大量的类和方法,可以用于处理各种任务,例如文件操作、网络通信、图形界面、数据库访问等。
使用Java API之前,首先需要了解Java语言的基本语法和面向对象的编程概念。
Java语言是一种面向对象的编程语言,所有的代码都是以类的形式组织的。
在使用Java API时,通常需要创建对象并调用对象的方法来完成所需的功能。
Java API的官方文档提供了关于各个类和方法的详细说明,可以在Java官网上找到对应的文档。
使用Java API时,可以先阅读文档以了解所需类和方法的用法和参数,然后根据文档中的示例代码进行编程。
下面以文件操作为例,介绍如何使用Java API编写一个简单的文件复制程序。
首先,需要导入Java API中提供的文件操作相关的类。
可以使用import关键字导入java.io包下的相关类,例如File和FileInputStream。
```javaimport java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;```然后,可以创建一个新的类来实现文件复制功能。
可以在类中定义一个复制文件的方法,接收两个参数:源文件路径和目标文件路径。
```javapublic class FileCopy {public void copyFile(String sourcePath, String targetPath) throws IOException {File sourceFile = new File(sourcePath);File targetFile = new File(targetPath);FileInputStream inputStream = newFileInputStream(sourceFile);FileOutputStream outputStream = new FileOutputStream(targetFile);byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}inputStream.close();outputStream.close();}}```在复制文件的方法中,首先创建源文件和目标文件的对象。
使用java基础类实现zip压缩和zip解压工具类分享概要
使用java基础类实现zip压缩和zip解压工具类分享使用java基础类写的一个简单的zip压缩解压工具类,实现了指定目录压缩到和该目录同名的zip文件和将zip文件解压到指定的目录的功能使用java基础类写的一个简单的zip压缩解压工具类复制代码代码如下:package .helper;import java.io.*;import java.util.logging.Logger;import java.util.zip.*;public class ZipUtil {private final static Logger logger = Logger.getLogger(ZipUtil.class.getName());private static final int BUFFER = 1024*10;/*** 将指定目录压缩到和该目录同名的zip文件,自定义压缩路径* @param sourceFilePath 目标文件路径* @param zipFilePath 指定zip文件路径* @return*/public static boolean zip(String sourceFilePath,String zipFilePath){boolean result=false;File source=new File(sourceFilePath);if(!source.exists()){(sourceFilePath+" doesn't exist.");return result;}if(!source.isDirectory()){(sourceFilePath+" is not a directory.");return result;}File zipFile=new File(zipFilePath+"/"+source.getName()+".zip"); if(zipFile.exists()){(zipFile.getName()+" is already exist.");return result;}else{if(!zipFile.getParentFile().exists()){if(!zipFile.getParentFile().mkdirs()){("cann't create file "+zipFile.getName());return result;}}}("creating zip file...");FileOutputStream dest=null;ZipOutputStream out =null;try {dest = new FileOutputStream(zipFile);CheckedOutputStream checksum = new CheckedOutputStream(dest, new Adler32()); out=new ZipOutputStream(new BufferedOutputStream(checksum));out.setMethod(ZipOutputStream.DEFLATED);compress(source,out,source.getName());result=true;} catch (FileNotFoundException e) {e.printStackTrace();}finally {if (out != null) {try {out.closeEntry();} catch (IOException e) {e.printStackTrace();}try {out.close();} catch (IOException e) {e.printStackTrace();}}}if(result){("done.");}else{("fail.");}return result;}private static void compress(File file,ZipOutputStream out,String mainFileName) { if(file.isFile()){FileInputStream fi= null;BufferedInputStream origin=null;try {fi = new FileInputStream(file);origin=new BufferedInputStream(fi, BUFFER);int index=file.getAbsolutePath().indexOf(mainFileName);String entryName=file.getAbsolutePath().substring(index);System.out.println(entryName);ZipEntry entry = new ZipEntry(entryName);out.putNextEntry(entry);byte[] data = new byte[BUFFER];int count;while((count = origin.read(data, 0, BUFFER)) != -1) {out.write(data, 0, count);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (origin != null) {try {origin.close();} catch (IOException e) {e.printStackTrace();}}}}else if (file.isDirectory()){File[] fs=file.listFiles();if(fs!=null&&fs.length>0){for(File f:fs){compress(f,out,mainFileName);}}}}/*** 将zip文件解压到指定的目录,该zip文件必须是使用该类的zip方法压缩的文件* @param zipFile* @param destPath* @return*/public static boolean unzip(File zipFile,String destPath){boolean result=false;if(!zipFile.exists()){(zipFile.getName()+" doesn't exist.");return result;}File target=new File(destPath);if(!target.exists()){if(!target.mkdirs()){("cann't create file "+target.getName());return result;}}String mainFileName=zipFile.getName().replace(".zip","");File targetFile=new File(destPath+"/"+mainFileName);if(targetFile.exists()){(targetFile.getName()+" already exist.");return result;}ZipInputStream zis =null;("start unzip file ...");try {FileInputStream fis= new FileInputStream(zipFile);CheckedInputStream checksum = new CheckedInputStream(fis, new Adler32()); zis = new ZipInputStream(new BufferedInputStream(checksum));ZipEntry entry;while((entry = zis.getNextEntry()) != null) {int count;byte data[] = new byte[BUFFER];String entryName=entry.getName();int index=entryName.indexOf(mainFileName);String newEntryName=destPath+"/"+entryName.substring(index); System.out.println(newEntryName);File temp=new File(newEntryName).getParentFile();if(!temp.exists()){if(!temp.mkdirs()){throw new RuntimeException("create file "+temp.getName() +" fail"); }}FileOutputStream fos = new FileOutputStream(newEntryName); BufferedOutputStream dest = new BufferedOutputStream(fos,BUFFER); while ((count = zis.read(data, 0, BUFFER)) != -1) {dest.write(data, 0, count);}dest.flush();dest.close();}result=true;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (zis != null) {try {zis.close();} catch (IOException e) {e.printStackTrace();}}}if(result){("done.");}else{("fail.");}return result;}public static void main(String[] args) throws IOException { //ZipUtil.zip("D:/apache-tomcat-7.0.30", "d:/temp");File zipFile=new File("D:/temp/apache-tomcat-7.0.30.zip"); ZipUtil.unzip(zipFile,"d:/temp") ;}}另一个压缩解压示例,二个工具大家参考使用吧复制代码代码如下:package np;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipFile;import java.util.zip.ZipInputStream;/*** 解压ZIP压缩文件到指定的目录*/public final class ZipToFile {/*** 缓存区大小默认20480*/private final static int FILE_BUFFER_SIZE = 20480; private ZipToFile() {}/*** 将指定目录的ZIP压缩文件解压到指定的目录* @param zipFilePath ZIP压缩文件的路径* @param zipFileName ZIP压缩文件名字* @param targetFileDir ZIP压缩文件要解压到的目录* @return flag 布尔返回值*/public static boolean unzip(String zipFilePath, String zipFileName, String targetFileDi r){boolean flag = false;//1.判断压缩文件是否存在,以及里面的内容是否为空File file = null; //压缩文件(带路径)ZipFile zipFile = null;file = new File(zipFilePath + "/" + zipFileName);System.out.println(">>>>>>解压文件【" + zipFilePath + "/" + zipFileName + "】到【" + ta rgetFileDir + "】目录下<<<<<<");if(false == file.exists()) {System.out.println(">>>>>>压缩文件【" + zipFilePath + "/" + zipFileName + "】不存在<<<< <<");return false;} else if(0 == file.length()) {System.out.println(">>>>>>压缩文件【" + zipFilePath + "/" + zipFileName + "】大小为0不需要解压<<<<<<");return false;} else {//2.开始解压ZIP压缩文件的处理byte[] buf = new byte[FILE_BUFFER_SIZE];int readSize = -1;ZipInputStream zis = null;FileOutputStream fos = null;try {// 检查是否是zip文件zipFile = new ZipFile(file);zipFile.close();// 判断目标目录是否存在,不存在则创建File newdir = new File(targetFileDir);if (false == newdir.exists()) {newdir.mkdirs();newdir = null;}zis = new ZipInputStream(new FileInputStream(file));ZipEntry zipEntry = zis.getNextEntry();// 开始对压缩包内文件进行处理while (null != zipEntry) {String zipEntryName = zipEntry.getName().replace('\\', '/'); //判断zipEntry是否为目录,如果是,则创建if(zipEntry.isDirectory()) {int indexNumber = stIndexOf('/');File entryDirs = new File(targetFileDir + "/" + zipEntryName.substring(0, indexNumber)); entryDirs.mkdirs();entryDirs = null;} else {try {fos = new FileOutputStream(targetFileDir + "/" + zipEntryName);while ((readSize = zis.read(buf, 0, FILE_BUFFER_SIZE)) != -1) {fos.write(buf, 0, readSize);}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getCause());} finally {try {if (null != fos) {fos.close();}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e.getCause());}}}zipEntry = zis.getNextEntry();}flag = true;} catch (ZipException e) {e.printStackTrace();throw new RuntimeException(e.getCause()); } catch (IOException e) {e.printStackTrace();throw new RuntimeException(e.getCause()); } finally {try {if (null != zis) {zis.close();}if (null != fos) {fos.close();}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e.getCause()); }}}return flag;}/*** 测试用的Main方法*/public static void main(String[] args) {String zipFilePath = "C:\\home";String zipFileName = "lp20120301.zip";String targetFileDir = "C:\\home\\lp20120301";boolean flag = ZipToFile.unzip(zipFilePath, zipFileName, targetFileDir); if(flag) {System.out.println(">>>>>>解压成功<<<<<<");} else {System.out.println(">>>>>>解压失败<<<<<<");}}}。
java文件压缩和解压(ZipInputStream,ZipOutputStream)
java⽂件压缩和解压(ZipInputStream,ZipOutputStream) 最近在看java se 的IO 部分,看到 java 的⽂件的压缩和解压⽐较有意思,主要⽤到了两个IO流-ZipInputStream, ZipOutputStream,不仅可以对⽂件进⾏压缩,还可以对⽂件夹进⾏压缩和解压。
ZipInputStream位于java.util.zip包下。
下⾯是它的API,⽐较简单。
ZipOutputStream位于java.util.zip包下。
下⾯是它的API,⽐较简单。
⽂件的压缩1public class TestFile2 {3public static void main ( String [ ] args ) throws IOException4 {5// new a file input stream6 FileInputStream fis = new FileInputStream (7 "/home/liangruihua/ziptest/1.txt" ) ;8 BufferedInputStream bis = new BufferedInputStream ( fis ) ;910// new a zipPutputStream11// /home/liangruihua/ziptest/1.zip -- the out put file path and12// name13 ZipOutputStream zos = new ZipOutputStream (14new FileOutputStream (15 "/home/liangruihua/ziptest/1.zip" ) ) ;16 BufferedOutputStream bos = new BufferedOutputStream ( zos ) ;1718// set the file name in the .zip file19 zos.putNextEntry ( new ZipEntry ( "1.txt" ) ) ;2021// set the declear22 zos.setComment ( "by liangruihua test!" ) ;2324byte [ ] b = new byte [ 100 ] ;25while ( true )26 {27int len = bis.read ( b ) ;28if ( len == - 1 )29break ;30 bos.write ( b , 0 , len ) ;31 }32 fis.close ( ) ;33 zos.close ( ) ;34 }35 }⽂件夹的压缩1public class TestDir2 {3public static void main ( String [ ] args ) throws IOException4 {5// the file path need to compress6 File file = new File ( "/home/liangruihua/ziptest/test" ) ;7 ZipOutputStream zos = new ZipOutputStream (8new FileOutputStream (9 "/home/liangruihua/ziptest/test.zip" ) ) ;1011// judge the file is the directory12if ( file.isDirectory ( ) )13 {14// get the every file in the directory15 File [ ] files = file.listFiles ( ) ;1617for ( int i = 0 ; i < files.length ; i ++ )18 {19// new the BuuferedInputStream20 BufferedInputStream bis = new BufferedInputStream (21new FileInputStream (22 files [ i ] ) ) ;23// the file entry ,set the file name in the zip24// file25 zos.putNextEntry ( new ZipEntry ( file26 .getName ( )27 + file.separator28 + files [ i ].getName ( ) ) ) ;29while ( true )30 {31byte [ ] b = new byte [ 100 ] ;32int len = bis.read ( b ) ;33if ( len == - 1 )34break ;35 zos.write ( b , 0 , len ) ;36 }3738// close the input stream39 bis.close ( ) ;40 }4142 }43// close the zip output stream44 zos.close ( ) ;45 }46 }⽂件的解压1public class TestZipInputStream2 {3public static void main ( String [ ] args ) throws ZipException ,4 IOException5 {6// get a zip file instance7 File file = new File ( "/home/liangruihua/ziptest/test.zip" ) ;89// get a ZipFile instance10 ZipFile zipFile = new ZipFile ( file ) ;1112// create a ZipInputStream instance13 ZipInputStream zis = new ZipInputStream ( new FileInputStream (14 file ) ) ;1516// create a ZipEntry instance , lay the every file from17// decompress file temporarily18 ZipEntry entry = null ;1920// a circle to get every file21while ( ( entry = zis.getNextEntry ( ) ) != null )22 {23 System.out.println ( "decompress file :"24 + entry.getName ( ) ) ;2526// define the path to set the file27 File outFile = new File ( "/home/liangruihua/ziptest/"28 + entry.getName ( ) ) ;2930// if the file's parent directory wasn't exits ,than31// create the directory32if ( ! outFile.getParentFile ( ).exists ( ) )33 {34 outFile.getParentFile ( ).mkdir ( ) ;35 }3637// if the file not exits ,than create the file38if ( ! outFile.exists ( ) )39 {40 outFile.createNewFile ( ) ;41 }4243// create an input stream44 BufferedInputStream bis = new BufferedInputStream (45 zipFile.getInputStream ( entry ) ) ;4647// create an output stream48 BufferedOutputStream bos = new BufferedOutputStream ( 49new FileOutputStream ( outFile ) ) ;50byte [ ] b = new byte [ 100 ] ;51while ( true )52 {53int len = bis.read ( b ) ;54if ( len == - 1 )55break ;56 bos.write ( b , 0 , len ) ;57 }58// close stream59 bis.close ( ) ;60 bos.close ( ) ;61 }62 zis.close ( ) ;6364 }65 }。
如何在java中解压zip和rar文件
一、解压rar文件。
由于WinRAR 是共享软件,并不是开源的,所以解压rar文件的前提是系统已经安装了winrar,比如本人的安装路径是:C:\\Program Files\\WinRAR\\winrar.exe然后运用ng.Process 的相关知识来运行系统命令行来实现解压的。
具体代码:Java代码*** 解压rar文件(需要系统安装Winrar 软件)*/public class UnRarFile {/*** 解压rar文件**/public void unRarFile(String targetPath, String absolutePath) {try {// 系统安装winrar的路径String cmd = "C:\\Program Files\\WinRAR\\winrar.exe";String unrarCmd = cmd + " x -r -p- -o+ " + absolutePath + " "+ targetPath;Process pre = rt.exec(unrarCmd);InputStreamReader isr = new InputStreamReader(pre.getInputStream()); BufferedReader bf = new BufferedReader(isr);String line = null;while ((line = bf.readLine()) != null) {line = line.trim();if ("".equals(line)) {continue;}System.out.println(line);}bf.close();} catch (Exception e) {System.out.println("解压发生异常");}}/***/public static void main(String[] args) {String targetPath = "D:\\test\\unrar\\";String rarFilePath = "D:\\test\\test.rar";UnRarFile unrar = new UnRarFile();unrar.unRarFile(targetPath, rarFilePath);}}二、解压zip文件由于zip是免费的,所以在jdk里提供了相应的类对zip文件的实现:java.util.zip.*,详细情况可以参考java APIJava代码/*** 解压zip文件*/public class UnzipFile {/*** 解压zip文件**/public void unzipFile(String targetPath, String zipFilePath) {try {File zipFile = new File(zipFilePath);InputStream is = new FileInputStream(zipFile);ZipInputStream zis = new ZipInputStream(is);ZipEntry entry = null;System.out.println("开始解压:" + zipFile.getName() + "...");while ((entry = zis.getNextEntry()) != null) {String zipPath = entry.getName();try {if (entry.isDirectory()) {File zipFolder = new File(targetPath + File.separator+ zipPath);if (!zipFolder.exists()) {zipFolder.mkdirs();}} else {File file = new File(targetPath + File.separator+ zipPath);if (!file.exists()) {File pathDir = file.getParentFile();pathDir.mkdirs();file.createNewFile();}FileOutputStream fos = new FileOutputStream(file); int bread;while ((bread = zis.read()) != -1) {fos.write(bread);}fos.close();}System.out.println("成功解压:" + zipPath);} catch (Exception e) {System.out.println("解压" + zipPath + "失败"); continue;}}zis.close();is.close();System.out.println("解压结束");} catch (Exception e) {e.printStackTrace();}}/***/public static void main(String[] args) { String targetPath = "D:\\test\\unzip"; String zipFile = "D:\\test\\test.zip"; UnzipFile unzip = new UnzipFile(); unzip.unzipFile(targetPath, zipFile); }}。
Java实现文件压缩与解压[zip格式,gzip格式]
Java实现⽂件压缩与解压[zip格式,gzip格式]Java实现ZIP的解压与压缩功能基本都是使⽤了Java的多肽和递归技术,可以对单个⽂件和任意级联⽂件夹进⾏压缩和解压,对于⼀些初学者来说是个很不错的实例。
zip扮演着归档和压缩两个⾓⾊;gzip并不将⽂件归档,仅只是对单个⽂件进⾏压缩,所以,在UNIX平台上,命令tar通常⽤来创建⼀个档案⽂件,然后命令gzip来将档案⽂件压缩。
Java I/O类库还收录了⼀些能读写压缩格式流的类。
要想提供压缩功能,只要把它们包在已有的I/O类的外⾯就⾏了。
这些类不是Reader和Writer,⽽是InputStream和OutStreamput的⼦类。
这是因为压缩算法是针对byte⽽不是字符的。
相关类与接⼝:Checksum 接⼝:被类Adler32和CRC32实现的接⼝Adler32 :使⽤Alder32算法来计算Checksum数⽬CRC32 :使⽤CRC32算法来计算Checksum数⽬CheckedInputStream :InputStream派⽣类,可得到输⼊流的校验和Checksum,⽤于校验数据的完整性CheckedOutputStream :OutputStream派⽣类,可得到输出流的校验和Checksum,⽤于校验数据的完整性DeflaterOutputStream :压缩类的基类。
ZipOutputStream :DeflaterOutputStream的⼀个⼦类,把数据压缩成Zip⽂件格式。
GZIPOutputStream :DeflaterOutputStream的⼀个⼦类,把数据压缩成GZip⽂件格式InflaterInputStream :解压缩类的基类ZipInputStream :InflaterInputStream的⼀个⼦类,能解压缩Zip格式的数据GZIPInputStream :InflaterInputStream的⼀个⼦类,能解压缩Zip格式的数据ZipEntry 类:表⽰ ZIP ⽂件条⽬ZipFile 类:此类⽤于从 ZIP ⽂件读取条⽬使⽤ZIP对多个⽂件进⾏压缩与解压Java对Zip格式类库⽀持得⽐较全⾯,得⽤它可以把多个⽂件压缩成⼀个压缩包。
JavaJar包压缩、解压使用指南
JavaJar包压缩、解压使⽤指南
什么是jar包
JAR(Java Archive)是Java的归档⽂件,它是⼀种与平台⽆关的⽂件格式,它允许将许多⽂件组合成⼀个压缩⽂件。
如何打/解包
使⽤jdk/bin/jar.exe⼯具,配置完环境变量后直接使得jar命令即可。
jar命令格式
jar {c t x u f }[ v m e 0 M i ][-C ⽬录]⽂件名...
{ctxu},这四个参数必须选选其⼀。
[v f m e 0 M i],这⼏个是可选参数,⽂件名也是必须的。
参数说明
-c创建⼀个jar包
-t显⽰jar中的内容列表
-x解压jar包
-u添加⽂件到jar包中
-f指定jar包的⽂件名
-v输出详细报告
-m指定MANIFEST.MF⽂件
-0⽣成jar包时不压缩内容
-M不⽣成清单⽂件MANIFEST.MF
-i为指定的jar⽂件创建索引⽂件
-C可在相应的⽬录下执⾏命令
关于MANIFEST.MF定义:
演⽰
往jar包添加⽂件
jar uf xxx.jar BOOT-INF/classes/application.yml
解压jar包
jar -xvf xxx.jar
打jar包,不⽣成清单⽂件,不压缩
jar -cvfM0 xxx.jar BOOT-INF/ META-INF/ org/
或者
jar -cvfM0 xxx.jar *
如果要往线上jar包添加、更新部分⽂件到jar包,这些命令也许对你有⽤。