我用java测试解压缩文件,以下是我的代码:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;public class TestUnZip {
public static void UnZipFiles(java.io.File zipfile, String descDir) {
try {
// Open the ZIP file
ZipFile zf = new ZipFile(zipfile);
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name
ZipEntry entry = ((ZipEntry) entries.nextElement());
String zipEntryName = entry.getName();
InputStream in = zf.getInputStream(entry);
// System.out.println(zipEntryName);
OutputStream out = new FileOutputStream(descDir + zipEntryName);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
// Close the file and stream
in.close();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} /**
* @param args
*/
public static void main(String[] args) {
TestUnZip tuz = new TestUnZip();
File file = new File("D:\\test.rar");
tuz.UnZipFiles(file, file.getParent());
}
}错误信息是:
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:204)
at java.util.zip.ZipFile.<init>(ZipFile.java:235)
at com.home.test.TestUnZip.UnZipFiles(TestUnZip.java:16)
at com.home.test.TestUnZip.main(TestUnZip.java:45)被搞了半天,希望有人帮我解答,谢谢!
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;public class TestUnZip {
public static void UnZipFiles(java.io.File zipfile, String descDir) {
try {
// Open the ZIP file
ZipFile zf = new ZipFile(zipfile);
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name
ZipEntry entry = ((ZipEntry) entries.nextElement());
String zipEntryName = entry.getName();
InputStream in = zf.getInputStream(entry);
// System.out.println(zipEntryName);
OutputStream out = new FileOutputStream(descDir + zipEntryName);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
// Close the file and stream
in.close();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} /**
* @param args
*/
public static void main(String[] args) {
TestUnZip tuz = new TestUnZip();
File file = new File("D:\\test.rar");
tuz.UnZipFiles(file, file.getParent());
}
}错误信息是:
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:204)
at java.util.zip.ZipFile.<init>(ZipFile.java:235)
at com.home.test.TestUnZip.UnZipFiles(TestUnZip.java:16)
at com.home.test.TestUnZip.main(TestUnZip.java:45)被搞了半天,希望有人帮我解答,谢谢!
我解压jar文件会报一个新错:
java.io.FileNotFoundException: C:\gem.jar\META-INF\MANIFEST.MF (系统找不到指定的路径。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
at com.home.test.UpZip.unzip(UpZip.java:34)
at com.home.test.UpZip.main(UpZip.java:55)
说明一下:为方便使用暴露了两个public接口
package test.zip;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;public class Zipper{
public static void zip(String fileDir, String zipName) throws Exception{
File folder = new File(fileDir);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipName));
zip(folder, zos, "");
zos.close();
}
private static void zip(File file, ZipOutputStream zos, String dir) throws Exception {
if(file.isDirectory()){
File[] folder = file.listFiles();
dir = dir + (dir.length() > 0 ? "" : "/") + file.getName();
zos.putNextEntry(new ZipEntry(dir + "/"));
for(File child : folder){
zip(child, zos, dir);
}
}else{
byte[] data = new byte[1024];
FileInputStream fis = new FileInputStream(file);
dir = dir + (dir.length() > 0 ? "" : "/") + file.getName();
ZipEntry entry = new ZipEntry(dir);
zos.putNextEntry(entry);
int count;
while((count = fis.read(data, 0, 1024)) != -1){
zos.write(data, 0, count);
}
fis.close();
}
}
public static void unZip(String zipDir,String unZipDir) throws Exception{
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipDir));
ZipEntry entry = zis.getNextEntry();
File file = new File(unZipDir);
file.mkdir();
while(entry != null){
if(entry.isDirectory()){
String name = entry.getName();
file = new File(unZipDir + "/" + name);
file.mkdir();
}else{
file = new File(unZipDir + "/" + entry.getName());
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
int count;
while((count = zis.read()) != -1){
fos.write(count);
}
fos.close();
}
entry = zis.getNextEntry();
}
zis.close();
}
}
Provides classes for reading and writing the standard ZIP and GZIP file formats. Rar格式不是标准的zip格式吧?
jar 也是有zlib方式压缩的, 和zip一样的。紧紧是后缀不一样。
你要是能用java包解了rar
那winrar还混傻
winrar能解zip/jar
是因为他们的算法都公开了
public class RarToFile {
/*
* cmd 解压缩命令
*/
private static String unrarCmd = "C:\\Program Files\\WinRAR\\unrar.exe x "; /**
* 将1个RAR文件解压
* rarFileName 需要解压的RAR文件(必须包含路径信息以及后缀)
* destDir 解压后的文件放置目录
*/
public static void unRARFile(String rarFileName, String destDir) {
unrarCmd +=" "+ rarFileName + " " + destDir;
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(unrarCmd);
//p.destroy();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String arg[]){
RarToFile r=new RarToFile();
r.unRARFile("d:\\1.rar", "d:\\");
}}