java解压缩算法代码 字符串压缩算法java

求助:用java实现哈夫曼编码压缩与解压缩算法。

你好,由于内容比较多,先概述一下先。如图所示,为我写的一个压缩软件,原理是利用哈弗曼算法实现的。我将资料整理好稍后就发到你邮箱,但在这里简要说明一下代码。

创新互联主营古县网站建设的网络公司,主营网站建设方案,手机APP定制开发,古县h5微信小程序搭建,古县网站营销推广欢迎古县等地区企业咨询

请看我的空间

中的文章共5篇(太长了)

1.HuffmanTextEncoder类完成压缩功能,可直接运行,压缩测试用文本文件。

2.HuffmanTextDecoder类完成解压缩功能,可直接运行,解压缩 压缩后的文本文件。

3.BitReader,工具类,实现对BufferedInputStream的按位读取。

4.BitWriter,工具类,实现按位写入的功能。该类来自网络。

5.MinHeapT ,模板工具类,实现了一个最小堆。生成Huffman树时使用。

求JAVA解压缩文件目录的源代码

package com.io2.homework;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

/*压缩文件夹*/

public class MyMultipleFileZip 

{

private String currentZipFilePath = "F:/MyZip.zip";

private String sourceFilePath;

private ZipOutputStream zos;

private FileInputStream fis;

public MyMultipleFileZip(String sourceFilePath) 

{

try

{

this.sourceFilePath = sourceFilePath;

zos = new ZipOutputStream(new FileOutputStream(currentZipFilePath));

//设定文件压缩级别

zos.setLevel(9);

} catch (FileNotFoundException e) 

{

e.printStackTrace();

}

}

// 在当前条目中写入具体内容

public void writeToEntryZip(String filePath) 

{

try

{

fis = new FileInputStream(filePath);

} catch (FileNotFoundException e1) 

{

e1.printStackTrace();

}

byte[] buff = new byte[1024];

int len = 0;

try 

{

while ((len = fis.read(buff)) != -1)

{

zos.write(buff, 0, len);

}

} catch (IOException e) 

{

e.printStackTrace();

}finally

{

if (fis != null)

try 

{

fis.close();

} catch (IOException e) 

{

e.printStackTrace();

}

}

}

// 添加文件条目

public void addFileEntryZip(String fileName) 

{

try 

{

zos.putNextEntry(new ZipEntry(fileName));

} catch (IOException e) 

{

e.printStackTrace();

}

}

public void addDirectoryEntryZip(String directoryName)

{

try 

{

zos.putNextEntry(new ZipEntry(directoryName + "/"));

} catch (IOException e)

{

e.printStackTrace();

}

}

// 遍历文件夹

public void listMyDirectory(String filePath)

{

File f = new File(filePath);

File[] files = f.listFiles();

if(files!=null)

{

for (File currentFile : files) 

{

// 设置条目名称(此步骤非常关键)

String entryName= currentFile.getAbsolutePath().split(":")[1].substring(1);

// 获取文件物理路径

String absolutePath = currentFile.getAbsolutePath();

if (currentFile.isDirectory()) 

{

addDirectoryEntryZip(entryName);

//进行递归调用

listMyDirectory(absolutePath);

}

else 

{

addFileEntryZip(entryName);

writeToEntryZip(absolutePath);

}

}

}

}

// 主要流程

public void mainWorkFlow()

{

listMyDirectory(this.sourceFilePath);

if(zos!=null)

try 

{

zos.close();

} catch (IOException e) 

{

e.printStackTrace();

}

}

public static void main(String[] args) 

{

new MyMultipleFileZip("F:/fountainDirectory").mainWorkFlow();

}

}

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 以流的形式解压带密码的zip

可以使用 Runtime 直接调用 winRar 的命令行命令来解压缩

注意:

1、winRar命令使用,在dos下输入 unrar 就可以看到全部的命令说明。该命令在winRar的安装目录下

2、winRar命令行命令的路径问题,也就是path。要么加入系统变量path中,要么在winRar的安装目录下执行程序

以下是程序代码,解压 test.rar 到当前目录下,密码123

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class TestRunTime {

public static void main(String[] args) {

Runtime run = Runtime.getRuntime();

try {

Process p = run.exec("unrar e test.rar -p123");//执行解压缩命令

BufferedInputStream in = new BufferedInputStream(p.getInputStream());

BufferedReader inBr = new BufferedReader(new InputStreamReader(in));

String lineStr;

while ((lineStr = inBr.readLine()) != null)

System.out.println(lineStr);

// 检查命令是否执行失败。

if (p.waitFor() != 0) {

if (p.exitValue() == 1)// p.exitValue()==0表示正常结束,1:非正常结束

System.err.println("命令执行失败!");

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

如何用java代码调用解压工具去解压.exe文件

再 windows下通过 cmd命令执行解压缩没问题,但是通过 java代码去执行不能解压是为什么?我在开始运行中输入命令: cmd/ c rar. exe x- y d:\\ auto. rar d:\\----上面命令可以解压成功,但是通过下面 java代码不能实现解压缩功能,请指点。主要代码: java. lang. Runtime. getRuntime(). exec(" cmd/ c rar. exe x- y d:\\ auto. rar d:\\");

再 windows下通过 cmd命令执行解压缩没问题,但是通过 java代码去执行不能解压是为什么?我在开始运行中输入命令: cmd/ c rar. exe x- y d:\\ auto. rar d:\\----上面命令可以解压成功,但是通过下面 java代码不能实现解压缩功能,请指点。主要代码: java. lang. Runtime. getRuntime(). exec(" cmd/ c rar. exe x- y d:\\ auto. rar d:\\");


文章标题:java解压缩算法代码 字符串压缩算法java
网页路径:http://ybzwz.com/article/doccdgp.html