压缩目录的代码,供参考:import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class FileZip
{
static final char SEPARATOR = File.separatorChar;
private int preffixLen = 0; public void compress(OutputStream out, File file) throws IOException
{
preffixLen = file.getParentFile().getAbsolutePath().length() + 1;
ZipOutputStream zos = new ZipOutputStream(out);
addFile(zos, file);
zos.close();
} private void addFile(ZipOutputStream zos, File file) throws IOException
{
String entryName = entryName(file);
if (entryName.equals("") || entryName.equals("."))
return; System.out.println("adding " + entryName);
ZipEntry entry = new ZipEntry(entryName);
entry.setTime(file.lastModified());
boolean isDirectory = file.isDirectory();
if (isDirectory)
{
entry.setMethod(0);
entry.setSize(0L);
entry.setCrc(0L);
}
else
entry.setSize(file.length()); zos.putNextEntry(entry);
if (isDirectory)
{
File[] files = file.listFiles();
for(int i=0; i<files.length; i++)
addFile(zos, files[i]);
}
else
{
byte buf[] = new byte[1024];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int bytes;
while ((bytes = bis.read(buf, 0, buf.length)) != -1)
zos.write(buf, 0, bytes);
bis.close();
}
zos.closeEntry();
} private String entryName(File file)
{
String entryName = file.getPath();
if (file.isDirectory())
entryName = entryName.endsWith(File.separator) ? entryName : entryName + File.separator;
entryName = entryName.replace(File.separatorChar, '/').substring(preffixLen);
return entryName;
} public static void main(String args[])
{
try
{
FileOutputStream fos = new FileOutputStream("test.zip");
FileZip zip = new FileZip();
zip.compress(new BufferedOutputStream(fos), new File("d:\\test\\jsp")); //compress folder d:\test\jsp
fos.close();
}
catch (Throwable e)
{
e.printStackTrace();
}
}
}
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class FileZip
{
static final char SEPARATOR = File.separatorChar;
private int preffixLen = 0; public void compress(OutputStream out, File file) throws IOException
{
preffixLen = file.getParentFile().getAbsolutePath().length() + 1;
ZipOutputStream zos = new ZipOutputStream(out);
addFile(zos, file);
zos.close();
} private void addFile(ZipOutputStream zos, File file) throws IOException
{
String entryName = entryName(file);
if (entryName.equals("") || entryName.equals("."))
return; System.out.println("adding " + entryName);
ZipEntry entry = new ZipEntry(entryName);
entry.setTime(file.lastModified());
boolean isDirectory = file.isDirectory();
if (isDirectory)
{
entry.setMethod(0);
entry.setSize(0L);
entry.setCrc(0L);
}
else
entry.setSize(file.length()); zos.putNextEntry(entry);
if (isDirectory)
{
File[] files = file.listFiles();
for(int i=0; i<files.length; i++)
addFile(zos, files[i]);
}
else
{
byte buf[] = new byte[1024];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int bytes;
while ((bytes = bis.read(buf, 0, buf.length)) != -1)
zos.write(buf, 0, bytes);
bis.close();
}
zos.closeEntry();
} private String entryName(File file)
{
String entryName = file.getPath();
if (file.isDirectory())
entryName = entryName.endsWith(File.separator) ? entryName : entryName + File.separator;
entryName = entryName.replace(File.separatorChar, '/').substring(preffixLen);
return entryName;
} public static void main(String args[])
{
try
{
FileOutputStream fos = new FileOutputStream("test.zip");
FileZip zip = new FileZip();
zip.compress(new BufferedOutputStream(fos), new File("d:\\test\\jsp")); //compress folder d:\test\jsp
fos.close();
}
catch (Throwable e)
{
e.printStackTrace();
}
}
}
解决方案 »
- 推荐一个 j2se 使用的混淆器
- 问个简单的正则,在线等,马上结贴,谢谢
- JComboBox中ComboBoxModel
- 这样写那里不对
- 客户机如何访问服务器?
- 为什么我用了new String(client.getManaddress().getBytes("gb2312"),"ISO8859_1");显示出来的还是乱码??
- 怎样把我的 .class 应用程序 转化成windows下的可执行文件 ( .exe) ?
- 为什么说我没有匹配的驱动程序哪?(内附源代码)
- 如何得到自增长字段的初始值 如: int field IDENTITY(6000,1)的(6000)&(1)信息?
- 如何在main方法里动态获取类的名字,前提不知道当前类名字,如何获取?
- 连接池的问题
- 超菜!!!!JAVA 一般用什么平台开发,到哪里下载!!!!????
该如何修改?
{
InputStream is = new BufferedInputStream(new FileInputStream("test.dat"), 4096); //source file;
OutputStream os = new BufferedOutputStream(new FileOutputStream("test.zip"), 4096); //dest file;
ZipOutputStream out = new ZipOutputStream(fos);
ZipEntry entry = new ZipEntry("s/test.dat");
out.putNextEntry(entry);
byte[] buf = new byte[4096];
int bytes = 0;
while((bytes = is.read(buf)) != -1)
out.write(buf, 0, bytes);
is.close();
out.close();
}
private String entryName(File file)
{
String entryName = file.getPath();
if (file.isDirectory())
entryName = entryName.endsWith(File.separator) ? entryName : entryName + File.separator;
entryName = entryName.replace(File.separatorChar, '/').substring(preffixLen);
return "s/" + entryName;
}
我刚才的问题的意思是,是否能够将文件压缩后不放在一个目录底下而是直接,而是直接象用第三方工具解压那样把文件直接解到当前目录?
{
String[] files = new String[]{"d:\\a.doc", "d:\\test\\b.doc"};//待压缩文件,在任何目录都可以 OutputStream os = new BufferedOutputStream(new FileOutputStream("test.zip"), 4096); //压缩后的文件
ZipOutputStream out = new ZipOutputStream(os);
byte[] buf = new byte[4096];
for(int i=0; i<files.length; i++)
{
InputStream is = new BufferedInputStream(new FileInputStream(files[i]), 4096);
int index = files[i].lastIndexOf(File.separatorChar);
ZipEntry entry = new ZipEntry(index==-1 ? files[i] : files[i].substring(index+1));
out.putNextEntry(entry);
int bytes = 0;
while((bytes = is.read(buf)) != -1)
out.write(buf, 0, bytes);
is.close();
}
out.close();
}