FileOutputStream out = new FileOutputStream("F:\\fuyou.zip");
ZipOutputStream zip = new ZipOutputStream(out);
ZipEntry ze = new ZipEntry("F:\\api");
zip.putNextEntry(ze);
zip.closeEntry();
zip.close();
我想在F盘下新建一个fuyou.zip压缩文件,里面有F盘下的api文件夹,但上面的运行结果只有一个api条目,还没文件夹或内容
ZipOutputStream zip = new ZipOutputStream(out);
ZipEntry ze = new ZipEntry("F:\\api");
zip.putNextEntry(ze);
zip.closeEntry();
zip.close();
我想在F盘下新建一个fuyou.zip压缩文件,里面有F盘下的api文件夹,但上面的运行结果只有一个api条目,还没文件夹或内容
楼主【fuyou001】截止到2008-06-26 16:24:33的历史汇总数据(不包括此帖):
发帖数:151 发帖分:4840
结贴数:151 结贴分:4840
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
public void zip(String zipFileName, String inputFile) throws Exception {
zip(zipFileName, new File(inputFile));
} public void zip(String zipFileName, File inputFile) throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
zip(out, inputFile, "");
System.out.println("zip done");
out.close();
} public void zip(ZipOutputStream out, File f, String base) throws Exception {
System.out.println("Zipping " + f.getName());
if (f.isDirectory()) {
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
while ((b = in.read()) != -1)
out.write(b);
in.close();
}
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;/**
* 用ZIP压缩和解压缩文件或目录
*/
public class CompressUtil { /**
* 压缩文件或者目录
* @param baseDirName 压缩的根目录
* @param fileName 根目录下待压缩的文件或文件夹名,
* 星号*表示压缩根目录下的全部文件。
* @param targetFileName 目标ZIP文件
*/
public static void zipFile(String baseDirName, String fileName,
String targetFileName){
//检测根目录是否存在
if (baseDirName == null){
System.out.println("压缩失败,根目录不存在:" + baseDirName);
return;
}
File baseDir = new File(baseDirName);
if (!baseDir.exists() || (!baseDir.isDirectory())){
System.out.println("压缩失败,根目录不存在:" + baseDirName);
return;
}
String baseDirPath = baseDir.getAbsolutePath();
//目标文件
File targetFile = new File(targetFileName);
try{
//创建一个zip输出流来压缩数据并写入到zip文件
ZipOutputStream out =new ZipOutputStream(
new FileOutputStream(targetFile));
if (fileName.equals("*")){
//将baseDir目录下的所有文件压缩到ZIP
CompressUtil.dirToZip(baseDirPath, baseDir, out);
} else {
File file = new File(baseDir, fileName);
if (file.isFile()){
CompressUtil.fileToZip(baseDirPath, file, out);
} else {
CompressUtil.dirToZip(baseDirPath, file, out);
}
}
out.close();
System.out.println("压缩文件成功,目标文件名:" + targetFileName);
} catch (IOException e){
System.out.println("压缩失败:" + e);
e.printStackTrace();
}
} /**
* 解压缩ZIP文件,将ZIP文件里的内容解压到targetDIR目录下
* @param zipName 待解压缩的ZIP文件名
* @param targetBaseDirName 目标目录
*/
public static void upzipFile(String zipFileName, String targetBaseDirName){
if (!targetBaseDirName.endsWith(File.separator)){
targetBaseDirName += File.separator;
}
try {
//根据ZIP文件创建ZipFile对象
ZipFile zipFile = new ZipFile(zipFileName);
ZipEntry entry = null;
String entryName = null;
String targetFileName = null;
byte[] buffer = new byte[4096];
int bytes_read;
//获取ZIP文件里所有的entry
Enumeration entrys = zipFile.entries();
//遍历所有entry
while (entrys.hasMoreElements()) {
entry = (ZipEntry)entrys.nextElement();
//获得entry的名字
entryName = entry.getName();
targetFileName = targetBaseDirName + entryName;
if (entry.isDirectory()){
// 如果entry是一个目录,则创建目录
new File(targetFileName).mkdirs();
continue;
} else {
// 如果entry是一个文件,则创建父目录
new File(targetFileName).getParentFile().mkdirs();
} //否则创建文件
File targetFile = new File(targetFileName);
System.out.println("创建文件:" + targetFile.getAbsolutePath());
//打开文件输出流
FileOutputStream os = new FileOutputStream(targetFile);
//从ZipFile对象中打开entry的输入流
InputStream is = zipFile.getInputStream(entry);
while ((bytes_read = is.read(buffer)) != -1){
os.write(buffer, 0, bytes_read);
}
//关闭流
os.close( );
is.close( );
}
System.out.println("解压缩文件成功!");
} catch (IOException err) {
System.err.println("解压缩文件失败: " + err);
}
}
/**
* 将目录压缩到ZIP输出流。
*/
private static void dirToZip(String baseDirPath, File dir,
ZipOutputStream out){
if (dir.isDirectory()){
//列出dir目录下所有文件
File[] files = dir.listFiles();
// 如果是空文件夹
if (files.length == 0){
ZipEntry entry = new ZipEntry(getEntryName(baseDirPath, dir));
// 存储目录信息
try {
out.putNextEntry(entry);
out.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
return;
}
for (int i=0; i<files.length; i++){
if (files[i].isFile()){
//如果是文件,调用fileToZip方法
CompressUtil.fileToZip(baseDirPath, files[i], out);
} else {
//如果是目录,递归调用
CompressUtil.dirToZip(baseDirPath, files[i], out);
}
}
}
}
/**
* 将文件压缩到ZIP输出流
*/
private static void fileToZip(String baseDirPath, File file,
ZipOutputStream out){
FileInputStream in = null;
ZipEntry entry = null;
// 创建复制缓冲区
byte[] buffer = new byte[4096];
int bytes_read;
if (file.isFile()){
try {
// 创建一个文件输入流
in = new FileInputStream(file);
// 做一个ZipEntry
entry = new ZipEntry(getEntryName(baseDirPath, file));
// 存储项信息到压缩文件
out.putNextEntry(entry);
// 复制字节到压缩文件
while((bytes_read = in.read(buffer)) != -1){
out.write(buffer, 0, bytes_read);
}
out.closeEntry();
in.close();
System.out.println("添加文件"
+ file.getAbsolutePath() + "被到ZIP文件中!");
} catch (IOException e){
e.printStackTrace();
}
}
}
/**
* 获取待压缩文件在ZIP文件中entry的名字。即相对于跟目录的相对路径名
* @param baseDirPath
* @param file
* @return
*/
private static String getEntryName(String baseDirPath, File file){
if (!baseDirPath.endsWith(File.separator)){
baseDirPath += File.separator;
}
String filePath = file.getAbsolutePath();
// 对于目录,必须在entry名字后面加上"/",表示它将以目录项存储。
if (file.isDirectory()){
filePath += "/";
}
int index = filePath.indexOf(baseDirPath);
return filePath.substring(index + baseDirPath.length());
}
public static void main(String[] args) {
//压缩C盘下的temp目录,压缩后的文件是C:/temp.zip
String baseDirName = "C:/";
String fileName = "temp/";
String zipFileName = "C:/temp.zip";
CompressUtil.zipFile(baseDirName, fileName, zipFileName);
//将刚创建的ZIP文件解压缩到D盘的temp目录下
System.out.println();
fileName = "D:/temp";
CompressUtil.upzipFile(zipFileName, fileName);
}
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class Test {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub FileOutputStream out = new FileOutputStream("F:\\fuyou002.zip");
ZipOutputStream zip = new ZipOutputStream(out);
File inputFile = new File("F:\\fuyou");
Test.zip(zip, inputFile, "");
out.close();
}
public static void zip(ZipOutputStream out, File f, String base) throws Exception {
System.out.println("Zipping " + f.getName());
if (f.isDirectory()) {
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
while ((b = in.read()) != -1)
out.write(b);
in.close();
}
}
}但压缩完成后,打开压缩文件夹,出现了这个错误:! F:\fuyou002.zip: 不可预料的压缩文件末端
这个是没有文件夹的.public static void main(String[] args) {
// TODO Auto-generated method stub
try{
FileOutputStream out = new FileOutputStream("c:\\fuyou002.zip");
ZipOutputStream zip = new ZipOutputStream(out);
File inputFile = new File("c:\\aa");
File[]list = inputFile.listFiles();
for(int i=0;i<list.length;i++)
{
ZipEntry zi = new ZipEntry(list[i].getName());
zip.putNextEntry(new ZipEntry(zi));
FileInputStream in = new FileInputStream(list[i]);
byte tt[]=new byte[512];
int b;
while ((b = in.read(tt)) != -1)
zip.write(tt,0,b);
in.close();
zip.closeEntry();
}
//Test1.zip(zip, inputFile, "");
zip.close();
out.close();
}catch (Exception e) {
// TODO: handle exception\
e.printStackTrace();
}
}
System.out.println("Zipping " + f.getName());
if (f.isDirectory()) {
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
out.closeEntry();
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
byte tt[]=new byte[512];
int b;
while ((b = in.read(tt)) != -1)
out.write(tt,0,b);
in.close();
out.closeEntry();
}
}