java源代码压缩包 源代码压缩包是怎么弄的

java压缩文件用ZipInputStream无法解压,下面是源代码

我想代码基本没有错,可以解压zip文件

公司主营业务:成都做网站、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出莱州免费做网站回馈大家。

但你的输入文件是rar。

rar和zip是完全不同的算法。rar是商业压缩格式,zip是公开格式。

java的预置库目前无法直接解压rar ,需要用第三方库

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解压缩文件目录的源代码

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源文件src.Zip怎么安装啊?

你看的应该是JAVA核心技术机械工业的。意思就是

1.首先保证JDK已经安装

2.而且JDK的环境变量PATH和CLASSPATH都已经设好。

3.启动cmd,到运行里(WIN+R)输入cmd进入命令提示中。

4.然后查看你的JDK地址并在cmd中输入地址 如 cd c:/user/admin/jdk1.8_05 cd是进入地址的命令

5.接着输入 mkdir src

cd src

6.输入 jar xvf ../src.zip

Java程序打成Jar包全过程

Java程序完成以后 对于Windows操作系统 习惯总是想双击某个exe文件就可以直接运行程序 现我将一步一步的实现该过程 最终结果是:不用安装JRE环境 不用安装数据库 直接双击一个exe文件 就可以运行程序

下面我将以我最近写的一个程序作例子 进行该打包过程

该程序是使用了:Hibernate Spring Derby的Java GUI (JDK需要 版本 因该版本才有Derby) 我使用的是Eclipse进行开发

第一步:完成Java GUI程序

在Eclipse下 程序能够正常运行

第二步:准备清单文件(MANIFEST MF)

方法 :直接拷贝其它能运行的JAR文件中的MANIFEST MF进行修改

方法 :利用IDE工具 如Eclipse在生成JAR文件时自动生成

MANIFEST MF内容如下:

Manifest Version:

Main Class: manager ui MainFrame

Class Path: /lib/spring jar /lib/hibernate jar /lib/derby jar

SplashScreen Imager: manager/resources/images/splash jpg

说明:

Manifest Version - 指定清单文件的版本号

Main Class -指定程序运行的入口类 注意 类名后不要加class扩展名

Class Path -指定支持库的路径 指程序运行目录 即导出的JAR包所在目录 程序运行时依据Class Path项的设置路径来查找支持库 每一个支持库之间用空格隔开 在这里使用了hibernate spring derby

注意:

如果Java应用程序用到了一些Eclipse包 那么就必须将这些包也复制到程序运行目录 设置到Class Path 否则程序将无法运行 引用了一些外部组件也需要如此设置 如hibernate spring derby

除了入口类的包名和类名之外 其他设置项都不分大小写 比如 Class Path写成class path或CLASS PATH也可以 swt jar写成SWT JAR也行

类名后不要加class扩展名

每一行的 : 后都有一个空格 如Class Path:空格 /lib/spring jar

Class Path中 引入的JAR文件每行不得超过 个 否则会报错 但在让人意外的是每行只有前 个有效 故将所有同类型的JAR文件做成一个JAR文件 如我这里的spring jar hibernate jar derby jar都是同类JAR文件的组合

第三步:修改spring配置文件

在spring的 sessionFactory bean的配置中则要这样写(与程序中ClassPathXmlApplicationContext对应)

property name= mappingLocations

list

valuemanager/entity/MyFile hbm xml/value

valuemanager/entity/FileType hbm xml/value

/list

/property

第四步:使用Eclipse生成JAR文件

右键单击项目名 在弹出菜单中选择 Export 在弹出的如下图所示的对话框中 选择 JAR文件 单击 Next

将右边不需要的文件都取消勾选 在 选择导出目标(Select the export destination) 项文本框中设置JAR包的输出路径和包名(可以任意取名)为 D:\manager\manager jar 接受其他的默认设置不变 单击 Next

附注 左边虽然选择了src目录 但源文件并不会导出到包中 除非勾选了 导出Java源代码文件和资源(Export java source files and resources) 项

接受默认设置不变 单击 Next

这一步较关键 如下图所示 选择 从工作空间中使用现有清单 项 将创建的清单文件输入 也可以通过旁边的 浏览 按钮来选择清单文件 输入清单文件后 单击 Finish Eclipse开始将项目打包

附:这里也可以选择Generate the manifest file 但生成的清单文件MAINFEST MF需要修改

注意:清单文件MAINFEST MF一定要按第二步那样设置

生成的JAR文件目录如下:

第五步:生成运行manager jar的批处理文件manager bat(该步可以不要)

在manager目录下创建一个批处理程序manager bat(名字任取 扩展名必须是bat) 其内容仅一句语句 如下

javaw jar manager jar

说明

javaw对应c:\jdk\jre\bin\javaw exe文件 如果windows提示命令未发现 则需要将c:\jdk\jre\bin路径加入到windows环境变量path中

在运行程序的时候有一个讨厌的黑色命令行窗口 要去掉它 可以将run bat内容更改如下 start javaw jar manager jar start是指调用了windows的 运行 命令

在后边加一个pause就可以让你看到具体哪里出错了 如:

start javaw jar manager jar

pause

双击manager bat 就可以运行该JAR文件了

第六步:让电脑不必安装JRE环境 也能运行

通常运行Java程序有个前提条件 用户电脑必须先安装JRE环境 虽然安装JRE环境非常简单 但毕竟多了一步 算是有一点点的瑕疵 这里给出一个不必让用户安装JRE环境的方法 其实现步骤如下

( )将原JDK中的 jre 目录复制到 D:\manager\java 目录下(java也可换成其他名称)

( )将JDK和JRE从本机卸载掉 这样表示本机没有安装JAVA运行环境

( )修改批处理文件manager bat中的命令为 start java\jre\bin\javaw jar manager jar 仅仅是在javaw前加上了一个相对应路径

双击manager bat即可在不安装JRE环境的电脑运行此Java应用程序

第七步:抛弃批处理文件(* bat) 生成exe文件

用批处理文件运行程序似乎不够专业 虽然它足以完成运行任务 但习惯就象一种毒药一旦染上就很难摆脱它的影响 Windows统治下的人们早已经习惯运行扩展名是EXE的程序 用* bat他们就会感觉别扭

我们可以用一个叫JavaLauncher的免费小程序来代替批处理文件去运行Java程序 JavaLauncher的下载网址是

下载下来的文件是一个名JavaLauncher zip的压缩包 解压后的目录结构如下所示

JavaLauncher zip目录结构

source        目录包含了JavaLauncher的源程序 是用C语言写的

changes txt   是新版的修改说明

launch exe    是主程序

launcher cfg  是配置文件

readme txt    是一些说明和示例

我们只需要launch exe launcher cfg两个文件 将这两个文件复制到打包文件所在的目录 launcher cfg是一个仅三行内容的文本文件 将它修改如下

\java\jre\bin\javaw exe

jar manager jar

第一行设置指向JAR包managger jar的目录 由于launch exe和myswt jar同在一个目录 所以用 即当前目录

第二行设置指向jre\bin\javaw exe的路径 在上面已将jre目录复制到了java子目录中

配置好launcher cfg后 双击launch exe即可运行java应用程序

如果仔佃研究eclipse的启动方式 发现eclipse和JavaLauncher的原理一样 eclipse exe相当于launch exe startup jar相当于manager jar 只不过eclipse exe不象launch exe要具有通用性 所以它没有* cfg这样的配置文件 而是将启动信息固化在eclipse exe中

第八步:美化图标

launch exe文件的图标太单调了 让我们给它换个好看点的 换程序的图标需要用到一个免费的软件 Resource Hacker

第九步:最后的打包

发送给用户之前 通常要用WinZip或WinRAR将所有的文件全部打成一个压缩包 然后用户得到这个压缩包后 将其解压缩后即可运行程序 Eclipse软件就是这种方式

lishixinzhi/Article/program/Java/hx/201311/25574


新闻名称:java源代码压缩包 源代码压缩包是怎么弄的
当前地址:http://pwwzsj.com/article/hgdddh.html