压缩目录的代码:
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"); //压缩到test.zip文件
FileZip zip = new FileZip();
zip.compress(new BufferedOutputStream(fos), new File("c:\\downloads\\ggg")); //压缩目录c:\\downloads\\ggg
fos.close();
}
catch (Throwable e)
{
e.printStackTrace();
}
}
}
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"); //压缩到test.zip文件
FileZip zip = new FileZip();
zip.compress(new BufferedOutputStream(fos), new File("c:\\downloads\\ggg")); //压缩目录c:\\downloads\\ggg
fos.close();
}
catch (Throwable e)
{
e.printStackTrace();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货