谁能帮我zip压缩和解压的改通了(150分了)并能在DOS下运行起来 楼主,把你的要求实现的功能再说明白点了,你说的在DOS下运行是指什么?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package zip;import java.io.*;import java.util.*;import java.util.zip.*;public class zip { /*** * 压缩制定文件/文件夹 ,压缩后的文件类型是zip;可以压缩中文内容的文本文件; * 可以实现属性结构文件夹的压缩,但是再中文名称得文件夹处理上有些问题, * 压缩后的中文件夹在用winrar解压不正确。 * @param strinfile 被压缩指定的文件/文件夹 * @param strzipfile压缩后的文件名称/文件夹名称;如果只给出了文件夹名称 * 那压缩后的文件名称就是文件夹名称+"/.zip" * * */ public static boolean zipfile(String infile, String strzipfile) { boolean blnzipfile = false; File filein; File fileout; String sourceFile = infile; //sourceFile = GBToUnicode(sourceFile); filein = new File(sourceFile); fileout = new File(strzipfile); /* if(fileout.isDirectory()){ fileout = new File(strzipfile+"/.zip"); }*/ try { FileOutputStream f = new FileOutputStream(fileout); // CheckedOutputStream csum=new CheckedOutputStream(f,new Adler32()); ZipOutputStream out = new ZipOutputStream(f); //new ZipOutputStream( new BufferedOutputStream(csum)); String[] a = null; //a =filein.list(); if (filein.isDirectory()) { a = filein.list(); System.out.println("文件夹内文件个数:" + a.length); for (int i = 1; i <= a.length; i++) { zipFileDetail(filein.getPath(), a[i - 1], out); } } else { zipFileDetail("", sourceFile, out); } out.close(); /*System.out.println("读文件"); FileInputStream fi=new FileInputStream(fileout); // CheckedInputStream csumi=new CheckedInputStream(fi,new Adler32()); ZipInputStream in2=new ZipInputStream(fi); //new ZipInputStream(new BufferedInputStream(csumi)); ZipEntry ze; // System.out.println("读文件数:"+in2.ggetChecksum().getValue()); while((ze=in2.getNextEntry())!=null){ System.out.println("源文件路径:"+ze); } in2.close(); ZipFile zf=new ZipFile(fileout); Enumeration e=zf.entries(); while(e.hasMoreElements()){ ZipEntry ze2=(ZipEntry)e.nextElement(); System.out.println("压缩完成,压缩文件保存在:"+ strzipfile); } System.out.println("---ok finsih ");*/ } catch (Exception e) { e.printStackTrace(); } return blnzipfile = true; } private static void zipFileDetail(String sPath, String strinfile, ZipOutputStream out) { System.out.println("路径"+sPath+"文件名"+strinfile); FileInputStream in = null; byte[] b = new byte[1024]; try { String sFileName = ""; if (sPath.length() > 0) { sFileName = sPath + "/" + strinfile; } else { sFileName = strinfile; } File filein = new File(sFileName); if (filein.isDirectory()) { String[] a = null; a = filein.list(); for (int i = 1; i <= a.length; i++) { zipFileDetail(sPath, strinfile + "/" + a[i - 1], out); // zipFileDetail(filein.getPath(),a[i-1],out); } } else { in = new FileInputStream(sFileName); //sFileName = new String (strinfile.getBytes()); //out.putNextEntry(new ZipEntry(strinfile)); //GBToUnicode out.putNextEntry(new ZipEntry(GBToUnicode(strinfile))); int c; while ( (c = in.read(b)) > 0) { out.write(b); } } } catch (Exception ex) { } finally { try { in.close(); } catch (Exception e) {} b = null; } } public static String UnicodeToGB(String strIn) { byte[] b; String strOut = null; if (strIn == null || (strIn.trim()).equals("")) { return strIn; } try { b = strIn.getBytes("GB2312"); strOut = new String(b, "ISO8859_1"); } catch (Exception e) { System.out.println("unicodeToGB exception : " + e.getMessage() + "\n"); } return strOut; } public static String GBToUnicode(String strIn) { byte[] b; String strOut = null; if (strIn == null || (strIn.trim()).equals("")) { return strIn; } try { b = strIn.getBytes("ISO8859_1"); strOut = new String(b, "GB2312"); } catch (Exception e) { System.out.println("GBToUnicode exception : " + e.getMessage() + "\n"); } return strOut; } public zip() { } public static void main(String[] args) { zip zip1 = new zip(); String s = "E:\\sql"; zipfile(GBToUnicode(s), "e:\\sql.zip"); }} package zip;import java.util.zip.*;import java.io.*;import java.util.*;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author not attributable * @version 1.0 */public class upzip { public upzip() { } public static void main(String[] args) { upzip upzip1 = new upzip(); System.out.println("读文件"); byte[] b = new byte[1024]; try { File file = new File("d:\\sql"); if (!file.exists()) { file.mkdir(); } ZipEntry ze; ZipFile zf = new ZipFile("e:\\sql.zip"); int i = 0; java.util.Enumeration e = zf.entries(); while (e.hasMoreElements()) { ze = (java.util.zip.ZipEntry) e.nextElement(); if (!ze.isDirectory()) { //是文件 String name = ze.getName(); System.out.println("文件名" + name); DataInputStream in = new DataInputStream(zf.getInputStream(ze)); File file1 = new File(file + "\\" + name); if (!file1.exists()) { file1.createNewFile(); DataOutputStream out = new DataOutputStream(new FileOutputStream( file1)); int c; while ( (c = in.read(b)) > 0) { out.write(b); } } } else { //是目录 } i++; } System.out.println("文件个数" + i); /* Enumeration e = zf.entries(); while (e.hasMoreElements()) { ZipEntry ze2 = (ZipEntry) e.nextElement(); if (ze2.isDirectory()) { //ze2.g } else { } } System.out.println("---ok finsih ");*/ } catch (Exception e) { System.out.print(e.getMessage()); e.printStackTrace(); } }} 以上是我用过的进行压缩,解压的两个类。在dos下运行就不用告你了吧,java命令。 老大们,我是叫你们安我的意思改哇1.ÏÈnew zipoutstream(new fileoutputstream()) 2.ÔÙÉèѹËõ¼¶±ð 3.ѹËõ·½·¨ 4.new zipentry(string) 5.zip.outnextentry 6.zip.write()//ÎļþÁ÷ 7.zip.outstream.close //zip.javaimport java.io.*;import java.util.*;import java.util.zip.*;public class zip { public static void main(String[] args) throws IOException { FileOutputStream f = new FileOutputStream("zip_test.zip "); CheckedOutputStream chos = new CheckedOutputStream(f, new Adler32()); ZipOutputStream zop = new ZipOutputStream(chos); for (int i = 0; i < args.length; i++) { zop.putNextEntry(new ZipEntry(args[i])); FileInputStream fs = new FileInputStream(args[i]); BufferedInputStream bf = new BufferedInputStream(fs); int temp; while ( (temp = bf.read()) != -1) { zop.write(temp); } } zop.close();}import java.io.*;import java.util.*;import java.util.zip.*;public class unzip { public static void main(String[] args) throws IOException { CheckedInputStream ck = new CheckedInputStream( new BufferedInputStream( new FileInputStream("zip_test.zip ")), new Adler32()); ZipInputStream zis = new ZipInputStream(ck); ZipEntry ze = zis.getNextEntry(); while (ze != null) { System.out.println(ze); FileWriter fw = new FileWriter("backup_" + ze.getName()); BufferedWriter bw = new BufferedWriter(fw); int temp = 0; while ( (temp = (int) zis.read()) != -1) { bw.write(temp); } bw.close(); ze = zis.getNextEntry(); } zis.close(); ck.close();}}---------------------测试:java zip 1.txt 2.txtjava unzip 楼上的请问CheckedOutputStream chos = new CheckedOutputStream(f, new Adler32());这一句的作用是什么为什么我想用的 int[] ddd; ddd = fs.ddd[args.length]; 用不起来,好像下面那个while可以去掉吧 那句是做checksum(就是zip包含有crc校验)ddd那句什么意思?(没什么用)while是需要的 zip加绝对路径可以。比如c:\1.txt由于你的程序里FileWriter fw = new FileWriter("backup_ " + ze.getName());会出现"backup_c:\1.txt"的错误路径,所以报错 那你能否帮我写一个能实现我所要功能的ZIP并切可以打开的十分的感谢。ddd就是用zientry里的byte[]数组啊把fs.负值进去这样做就不要循环了,用while运行的速度慢 ddd = fs.ddd[args.length]; //???--------------------------要提高效率,修改while, 上面的程序每次仅读1个字节 byte[] buf = new byte[1024]; ... int len = 0; while ( (len = bf.read(buf)) != -1) { zop.write(buf,0,len); }unzip中FileWriter fw = new FileWriter("backup_" + ze.getName()); --------------------------- 如果你非得解出来文件名不一样,那就ze.getName()+".backup" 看一下我写的可以通过了,但我想把它改成用调用函数的类型来写,请楼上的老大指点import java.io.*; import java.util.*; import java.util.zip.*; public class zip2 { public static void main(String[] args) throws IOException { FileOutputStream f = new FileOutputStream( "zip_test.zip "); ZipOutputStream zop = new ZipOutputStream(f); for (int i = 0; i<args.length; i++) { zop.putNextEntry(new ZipEntry(args[i])); FileInputStream fs = new FileInputStream(args[i]); byte[] filebyte = new byte[fs.available()]; fs.read(filebyte); zop.write(filebyte); } zop.close(); }} void unzip(String zipfilename) throws IOException { System.out.println(zipfilename); FileInputStream fis= new FileInputStream(zipfilename); ZipInputStream zis = new ZipInputStream(fis); ZipEntry ze = zis.getNextEntry(); while (ze != null) { //System.out.println(ze); FileOutputStream fw = new FileOutputStream( ze.getName()); long ll = ze.getSize(); int len = (int)ll; System.out.println(ll); byte[] temp = new byte[16298] ; zis.read(temp,0,16297); fw.write(temp); fw.close(); ze = zis.getNextEntry(); } zis.close(); }为什么我解出来的东东,不是原来的东西unzip,请高手指点 还没搞定?----------------------------------------------- long ll = ze.getSize(); int len = (int)ll; System.out.println(ll); byte[] temp = new byte[16298] ; zis.read(temp,0,16297); fw.write(temp); //不管读了多少,你都写入16298字节,所以你解出文件都是一样大-------------------------------------------读多少,写多少上面的unzip类中不是有代码吗 package com.beiwei.zip.zipType;/*** <p>Title: 压缩文件</p>* <p>Description:利用org.apache.tools.zip解决了解压zip时中文名称出错的情况 </p>* <p>Copyright: Copyright (c) 2004</p>* <p>Company: </p>* @author liwei* @version 1.0*/import java.io.*;import java.text.SimpleDateFormat;import java.util.*;import java.util.zip.Adler32;import java.util.zip.CheckedOutputStream;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;public class Zip { FileOutputStream fos; CheckedOutputStream csum; ZipOutputStream zos; int index; /** * @deprecated 压缩处理 * @param zipFileName 要进行压缩处理的文件(d:/aa.zip 或者 d:/\aa) * @param outputDirectory 压缩处理后的文件路径(d:/哈哈.zip 或 d:/ 如果是目录则以时间命名生成.zip文件) * @return void */ public void zip(String inputFile,String outputFile) { try { File in_f=new File(inputFile); File out_f=new File(outputFile); if(out_f.isDirectory()) out_f=new File(outputFile+"/"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".zip"); if(!in_f.exists()) System.out.println("文件不存在!"); else { fos=new FileOutputStream(out_f); csum=new CheckedOutputStream(fos,new Adler32()); zos=new ZipOutputStream(new BufferedOutputStream(csum)); index=out_f.toString().lastIndexOf("\\"); zipF(in_f); zos.close(); } } catch (Exception ex) { System.out.println("异常:"+ex.getMessage()); } } /** * @deprecated 迭代压缩文件 * @param f File 源文件对象 * @throws Exception */ public void zipF(File f) throws Exception{ if(f.isFile()){ FileInputStream in=new FileInputStream(f); String etr=f.toString().substring(index+1); zos.putNextEntry(new ZipEntry(etr)); byte[] b=new byte[4096]; int byte_read; while((byte_read=in.read(b))!=-1) zos.write(b,0,byte_read); in.close(); return; } else{ ZipEntry ze=new ZipEntry(f.toString().substring(index+1)+"/"); zos.putNextEntry(ze); File[] fs=f.listFiles(); if(fs!=null) for(int i=0;i<fs.length;i++) zipF(fs[i]); } } //测试 public static void main(String[] args){ try{ //Zip zip=new Zip(); //zip.zip("e:/哈哈","e:/呵呵.zip"); //zip.zip("e:/哈哈","e:/"); }catch(Exception e){e.printStackTrace(System.out);} }} /* * 创建日期 2005-2-26 */package com.beiwei.zip.zipType ;import java.io.* ;import java.util.* ;import org.apache.tools.zip.ZipFile ;import org.apache.tools.zip.ZipEntry ;/** * @Description: 解压zip文件 * @author liwei */public class UZip{ /** * @deprecated 解压处理 * @param zipFileName * 要进行压缩处理的文件(d:/aa.zip") * @param outputDirectory * 压缩处理后的文件路径(d:/) */ public void unzip(String zipFileName, String outputDirectory) throws Exception { try { ZipFile zipFile = new ZipFile(zipFileName) ; Enumeration e = zipFile.getEntries( ) ; org.apache.tools.zip.ZipEntry zipEntry = null ; while (e.hasMoreElements( )) { zipEntry = (ZipEntry) e.nextElement( ) ; System.out.println("unziping " + zipEntry.getName( )) ; if ( zipEntry.isDirectory( ) ) { String name = zipEntry.getName( ) ; name = name.substring(0, name.length( ) - 1) ; File f = new File(outputDirectory + File.separator + name) ; f.mkdirs( ) ; } else { File f1 = new File(outputDirectory) ; File f = new File(outputDirectory + File.separator + zipEntry.getName( )) ; System.out.println(f.getParent()); File f2=new File(f.getParent()); if(!f2.exists()) f2.mkdirs(); f.createNewFile( ) ; InputStream in = zipFile.getInputStream(zipEntry) ; FileOutputStream out = new FileOutputStream(f) ; //--------解决了图片失真的情况 int c ; byte [ ] by = new byte [ 1024 ] ; while ((c = in.read(by)) != -1) { out.write(by, 0, c) ; } out.close( ) ; in.close( ) ; } } } catch ( Exception ex ) { System.out.println("异常:" + ex.getMessage( )) ; } } //测试 public static void main(String [ ] args) { try { //UZip test = new UZip( ) ; //test.unzip("e:/kf.zip", "e:/hehe/") ; } catch ( Exception e ) { e.printStackTrace(System.out) ; } }} 实现自动计算会员折扣 如何给一个JList加上滚动条? 用properties类读写ini文件的问题 高手来看下代码,解决客户端和服务器互相通话的功能! java中有垃圾回收GC, 为什么还要调用close 急等高人赐教 怎么通过java应用程序把一个页面显示出来? 急啊!!!!!高分(100分)求详细的注释,高手请进~~~~ 请问各位是不是从JApplet继承来的applet,会在浏览器显示上游问题! 如何通过服务器返回到客户端一个ArrayList集合? 请问用Graphic画的图形,应该在什么事件调用重画方法 谢谢~关于Thread.currentThread.destory()的问题
import java.util.*;
import java.util.zip.*;public class zip {
/***
* 压缩制定文件/文件夹 ,压缩后的文件类型是zip;可以压缩中文内容的文本文件;
* 可以实现属性结构文件夹的压缩,但是再中文名称得文件夹处理上有些问题,
* 压缩后的中文件夹在用winrar解压不正确。
* @param strinfile 被压缩指定的文件/文件夹
* @param strzipfile压缩后的文件名称/文件夹名称;如果只给出了文件夹名称
* 那压缩后的文件名称就是文件夹名称+"/.zip"
*
*
*/
public static boolean zipfile(String infile, String strzipfile) {
boolean blnzipfile = false;
File filein;
File fileout;
String sourceFile = infile;
//sourceFile = GBToUnicode(sourceFile);
filein = new File(sourceFile);
fileout = new File(strzipfile);
/* if(fileout.isDirectory()){
fileout = new File(strzipfile+"/.zip");
}*/
try {
FileOutputStream f = new FileOutputStream(fileout);
// CheckedOutputStream csum=new CheckedOutputStream(f,new Adler32());
ZipOutputStream out = new ZipOutputStream(f);
//new ZipOutputStream( new BufferedOutputStream(csum));
String[] a = null;
//a =filein.list();
if (filein.isDirectory()) {
a = filein.list();
System.out.println("文件夹内文件个数:" + a.length);
for (int i = 1; i <= a.length; i++) {
zipFileDetail(filein.getPath(), a[i - 1], out);
}
}
else {
zipFileDetail("", sourceFile, out);
}
out.close();
/*System.out.println("读文件");
FileInputStream fi=new FileInputStream(fileout);
// CheckedInputStream csumi=new CheckedInputStream(fi,new Adler32());
ZipInputStream in2=new ZipInputStream(fi);
//new ZipInputStream(new BufferedInputStream(csumi));
ZipEntry ze;
// System.out.println("读文件数:"+in2.ggetChecksum().getValue());
while((ze=in2.getNextEntry())!=null){
System.out.println("源文件路径:"+ze);
}
in2.close();
ZipFile zf=new ZipFile(fileout);
Enumeration e=zf.entries();
while(e.hasMoreElements()){
ZipEntry ze2=(ZipEntry)e.nextElement();
System.out.println("压缩完成,压缩文件保存在:"+ strzipfile);
}
System.out.println("---ok finsih ");*/
}
catch (Exception e) {
e.printStackTrace();
}
return blnzipfile = true;
} private static void zipFileDetail(String sPath, String strinfile,
ZipOutputStream out) {
System.out.println("路径"+sPath+"文件名"+strinfile);
FileInputStream in = null;
byte[] b = new byte[1024];
try {
String sFileName = "";
if (sPath.length() > 0) {
sFileName = sPath + "/" + strinfile;
}
else {
sFileName = strinfile; }
File filein = new File(sFileName);
if (filein.isDirectory()) {
String[] a = null;
a = filein.list();
for (int i = 1; i <= a.length; i++) {
zipFileDetail(sPath, strinfile + "/" + a[i - 1], out);
// zipFileDetail(filein.getPath(),a[i-1],out);
}
}
else {
in = new FileInputStream(sFileName);
//sFileName = new String (strinfile.getBytes());
//out.putNextEntry(new ZipEntry(strinfile));
//GBToUnicode
out.putNextEntry(new ZipEntry(GBToUnicode(strinfile)));
int c;
while ( (c = in.read(b)) > 0) {
out.write(b);
}
}
}
catch (Exception ex) {
}
finally {
try {
in.close();
}
catch (Exception e) {}
b = null;
}
} public static String UnicodeToGB(String strIn) {
byte[] b;
String strOut = null;
if (strIn == null || (strIn.trim()).equals("")) {
return strIn;
}
try {
b = strIn.getBytes("GB2312");
strOut = new String(b, "ISO8859_1");
}
catch (Exception e) {
System.out.println("unicodeToGB exception : " + e.getMessage() + "\n");
}
return strOut;
} public static String GBToUnicode(String strIn) {
byte[] b;
String strOut = null;
if (strIn == null || (strIn.trim()).equals("")) {
return strIn;
}
try {
b = strIn.getBytes("ISO8859_1");
strOut = new String(b, "GB2312");
}
catch (Exception e) {
System.out.println("GBToUnicode exception : " + e.getMessage() + "\n");
}
return strOut;
} public zip() {
} public static void main(String[] args) {
zip zip1 = new zip();
String s = "E:\\sql";
zipfile(GBToUnicode(s), "e:\\sql.zip");
}
}
import java.io.*;
import java.util.*;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class upzip {
public upzip() {
} public static void main(String[] args) {
upzip upzip1 = new upzip();
System.out.println("读文件");
byte[] b = new byte[1024];
try {
File file = new File("d:\\sql");
if (!file.exists()) {
file.mkdir();
}
ZipEntry ze;
ZipFile zf = new ZipFile("e:\\sql.zip");
int i = 0;
java.util.Enumeration e = zf.entries();
while (e.hasMoreElements()) {
ze = (java.util.zip.ZipEntry) e.nextElement();
if (!ze.isDirectory()) { //是文件
String name = ze.getName();
System.out.println("文件名" + name);
DataInputStream in = new DataInputStream(zf.getInputStream(ze));
File file1 = new File(file + "\\" + name);
if (!file1.exists()) {
file1.createNewFile();
DataOutputStream out = new DataOutputStream(new FileOutputStream(
file1));
int c;
while ( (c = in.read(b)) > 0) {
out.write(b);
}
}
}
else { //是目录 }
i++; }
System.out.println("文件个数" + i);
/*
Enumeration e = zf.entries();
while (e.hasMoreElements()) {
ZipEntry ze2 = (ZipEntry) e.nextElement();
if (ze2.isDirectory()) {
//ze2.g
}
else {
}
}
System.out.println("---ok finsih ");*/
}
catch (Exception e) {
System.out.print(e.getMessage());
e.printStackTrace();
} }}
2.ÔÙÉèѹËõ¼¶±ð
3.ѹËõ·½·¨
4.new zipentry(string)
5.zip.outnextentry
6.zip.write()//ÎļþÁ÷
7.zip.outstream.close
import java.io.*;
import java.util.*;
import java.util.zip.*;public class zip {
public static void main(String[] args) throws IOException { FileOutputStream f =
new FileOutputStream("zip_test.zip ");
CheckedOutputStream chos =
new CheckedOutputStream(f, new Adler32());
ZipOutputStream zop = new ZipOutputStream(chos);
for (int i = 0; i < args.length; i++) {
zop.putNextEntry(new ZipEntry(args[i]));
FileInputStream fs =
new FileInputStream(args[i]);
BufferedInputStream bf =
new BufferedInputStream(fs); int temp;
while ( (temp = bf.read()) != -1) {
zop.write(temp);
}
}
zop.close();
}
import java.io.*;
import java.util.*;
import java.util.zip.*;public class unzip {
public static void main(String[] args) throws IOException { CheckedInputStream ck = new CheckedInputStream(
new BufferedInputStream(
new FileInputStream("zip_test.zip ")),
new Adler32());
ZipInputStream zis = new ZipInputStream(ck); ZipEntry ze = zis.getNextEntry();
while (ze != null) {
System.out.println(ze);
FileWriter fw = new FileWriter("backup_" + ze.getName());
BufferedWriter bw = new BufferedWriter(fw); int temp = 0;
while ( (temp = (int) zis.read()) != -1) {
bw.write(temp);
}
bw.close();
ze = zis.getNextEntry();
}
zis.close();
ck.close();
}
}
---------------------
测试:
java zip 1.txt 2.txt
java unzip
请问CheckedOutputStream chos =
new CheckedOutputStream(f, new Adler32());这一句的作用是什么为什么我想用的 int[] ddd;
ddd = fs.ddd[args.length]; 用不起来,好像下面那个while可以去掉吧
FileWriter fw = new FileWriter("backup_ " + ze.getName());
会出现"backup_c:\1.txt"的错误路径,所以报错
十分的感谢。
ddd就是用zientry里的byte[]数组啊把fs.负值进去这样做就不要循环了,用while运行的速度慢
--------------------------
要提高效率,修改while, 上面的程序每次仅读1个字节
byte[] buf = new byte[1024];
...
int len = 0;
while ( (len = bf.read(buf)) != -1) {
zop.write(buf,0,len);
}unzip中
FileWriter fw = new FileWriter("backup_" + ze.getName());
---------------------------
如果你非得解出来文件名不一样,那就ze.getName()+".backup"
import java.io.*;
import java.util.*;
import java.util.zip.*;
public class zip2
{
public static void main(String[] args) throws IOException
{
FileOutputStream f = new FileOutputStream( "zip_test.zip "); ZipOutputStream zop = new ZipOutputStream(f);
for (int i = 0; i<args.length; i++)
{
zop.putNextEntry(new ZipEntry(args[i]));
FileInputStream fs = new FileInputStream(args[i]);
byte[] filebyte = new byte[fs.available()];
fs.read(filebyte);
zop.write(filebyte);
}
zop.close();
}
}
{
System.out.println(zipfilename);
FileInputStream fis= new FileInputStream(zipfilename);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry ze = zis.getNextEntry();
while (ze != null)
{
//System.out.println(ze);
FileOutputStream fw = new FileOutputStream( ze.getName());
long ll = ze.getSize();
int len = (int)ll;
System.out.println(ll);
byte[] temp = new byte[16298] ;
zis.read(temp,0,16297);
fw.write(temp);
fw.close();
ze = zis.getNextEntry();
}
zis.close();
}
为什么我解出来的东东,不是原来的东西unzip,请高手指点
long ll = ze.getSize();
int len = (int)ll;
System.out.println(ll);
byte[] temp = new byte[16298] ;
zis.read(temp,0,16297);
fw.write(temp); //不管读了多少,你都写入16298字节,所以你解出文件都是一样大
-------------------------------------------
读多少,写多少
上面的unzip类中不是有代码吗
package com.beiwei.zip.zipType;
/**
* <p>Title: 压缩文件</p>
* <p>Description:利用org.apache.tools.zip解决了解压zip时中文名称出错的情况 </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author liwei
* @version 1.0
*/
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class Zip
{
FileOutputStream fos;
CheckedOutputStream csum;
ZipOutputStream zos;
int index;
/**
* @deprecated 压缩处理
* @param zipFileName 要进行压缩处理的文件(d:/aa.zip 或者 d:/\aa)
* @param outputDirectory 压缩处理后的文件路径(d:/哈哈.zip 或 d:/ 如果是目录则以时间命名生成.zip文件)
* @return void
*/
public void zip(String inputFile,String outputFile) {
try {
File in_f=new File(inputFile);
File out_f=new File(outputFile);
if(out_f.isDirectory())
out_f=new File(outputFile+"/"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".zip");
if(!in_f.exists())
System.out.println("文件不存在!");
else
{
fos=new FileOutputStream(out_f);
csum=new CheckedOutputStream(fos,new Adler32());
zos=new ZipOutputStream(new BufferedOutputStream(csum));
index=out_f.toString().lastIndexOf("\\");
zipF(in_f);
zos.close();
}
}
catch (Exception ex) {
System.out.println("异常:"+ex.getMessage());
}
}
/**
* @deprecated 迭代压缩文件
* @param f File 源文件对象
* @throws Exception
*/
public void zipF(File f) throws Exception{
if(f.isFile()){
FileInputStream in=new FileInputStream(f);
String etr=f.toString().substring(index+1);
zos.putNextEntry(new ZipEntry(etr));
byte[] b=new byte[4096];
int byte_read;
while((byte_read=in.read(b))!=-1)
zos.write(b,0,byte_read);
in.close();
return;
}
else{
ZipEntry ze=new ZipEntry(f.toString().substring(index+1)+"/");
zos.putNextEntry(ze);
File[] fs=f.listFiles();
if(fs!=null)
for(int i=0;i<fs.length;i++)
zipF(fs[i]);
}
}
//测试
public static void main(String[] args){
try{
//Zip zip=new Zip();
//zip.zip("e:/哈哈","e:/呵呵.zip");
//zip.zip("e:/哈哈","e:/");
}catch(Exception e){e.printStackTrace(System.out);}
}
}
* 创建日期 2005-2-26
*/
package com.beiwei.zip.zipType ;import java.io.* ;
import java.util.* ;
import org.apache.tools.zip.ZipFile ;
import org.apache.tools.zip.ZipEntry ;/**
* @Description: 解压zip文件
* @author liwei
*/
public class UZip
{ /**
* @deprecated 解压处理
* @param zipFileName
* 要进行压缩处理的文件(d:/aa.zip")
* @param outputDirectory
* 压缩处理后的文件路径(d:/)
*/
public void unzip(String zipFileName, String outputDirectory)
throws Exception
{
try
{
ZipFile zipFile = new ZipFile(zipFileName) ;
Enumeration e = zipFile.getEntries( ) ; org.apache.tools.zip.ZipEntry zipEntry = null ; while (e.hasMoreElements( ))
{
zipEntry = (ZipEntry) e.nextElement( ) ;
System.out.println("unziping " + zipEntry.getName( )) ;
if ( zipEntry.isDirectory( ) )
{
String name = zipEntry.getName( ) ;
name = name.substring(0, name.length( ) - 1) ;
File f = new File(outputDirectory + File.separator + name) ;
f.mkdirs( ) ;
}
else
{ File f1 = new File(outputDirectory) ;
File f = new File(outputDirectory + File.separator
+ zipEntry.getName( )) ;
System.out.println(f.getParent());
File f2=new File(f.getParent());
if(!f2.exists()) f2.mkdirs();
f.createNewFile( ) ;
InputStream in = zipFile.getInputStream(zipEntry) ;
FileOutputStream out = new FileOutputStream(f) ;
//--------解决了图片失真的情况
int c ;
byte [ ] by = new byte [ 1024 ] ;
while ((c = in.read(by)) != -1)
{
out.write(by, 0, c) ;
}
out.close( ) ;
in.close( ) ;
}
} }
catch ( Exception ex )
{
System.out.println("异常:" + ex.getMessage( )) ;
} }
//测试
public static void main(String [ ] args)
{
try
{
//UZip test = new UZip( ) ;
//test.unzip("e:/kf.zip", "e:/hehe/") ; }
catch ( Exception e )
{
e.printStackTrace(System.out) ;
}
}
}