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.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;/** */
/**
* 打包照片文件
*/
public class YZ { private final static String AddPath = "date";// 压缩文件夹 private final static String AddFile = "info.rar";// 压缩文件 public static List<String> runYz(String zipPath, String zipFile)
throws IOException {
return new YZ().zip(AddPath, AddFile);
} public static void main(String[] args) throws IOException {
// 压缩的目录,//压缩后的文件 runYz(AddPath, AddFile); System.out.println("end");
} // 压缩文件夹 // 压缩文件名
public List<String> zip(String zipPath, String zipFile) throws IOException {
List<String> list = new ArrayList<String>();
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)); // 压缩包流
zos.setEncoding(CharSet);
zip(new File(zipPath), list, zos);
zos.closeEntry();
zos.close();
return list; } // 压缩
private void zip(File rootPath, List<String> list, ZipOutputStream zos)
throws IOException {
File filesPath[] = rootPath.listFiles();
for (File filePath : filesPath) {
if (filePath.isDirectory())
zip(filePath, list, zos);
else {
String tmpVale = filePath.getPath().replace(
getZipView(AddPath), ReplaceSign)
+ filePath.getName(); list.add(filePath.getPath());// 记录文件
zos.putNextEntry(new ZipEntry(tmpVale));
add(zos, filePath);
}
}
if (new File(SumRun.LogFile).exists()
&& new File(SumRun.LogFile).isFile()) {
zos.putNextEntry(new ZipEntry(SumRun.LogFile));
add(zos, new File(SumRun.LogFile));
} if (new File(SumRun.KeyFile).exists()
&& new File(SumRun.KeyFile).isFile()) {
zos.putNextEntry(new ZipEntry(SumRun.KeyFile));
add(zos, new File(SumRun.KeyFile));
} } // 压缩写文件
private void add(ZipOutputStream zos, File filePath) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
filePath.getPath()));
while (bis.read(BufSum, 0, Buf) != -1)
zos.write(BufSum);
bis.close();
} // ---------------------------------------------------------------------- // 压缩文件的root目录名称
private String getZipView(String viewDir) {
return viewDir.substring(0, viewDir.lastIndexOf(LastSign) + 1);
} private final byte[] BufSum = new byte[10240]; // 缓冲区 private final int Buf = 2048; // 缓冲区 private final static String LastSign = "\\";// 压缩显示第一个目录名称标识 private final static String ReplaceSign = "";// 压缩显示第一个目录名称标识替换 private final static String CharSet = "GB18030";};
public static void doZip(String zipName, File fullFile)
throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipName));
zip(out, fullFile, "");
out.close();
} private static void zip(ZipOutputStream out, File f, String base)
throws Exception {
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++) {
doZip(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();
}
}
希望能多读一些在写。我有点不明白如果设置成1024,那如果最后不是剩下的不是整1024,那不是等于缓冲区还是设置大了吗?就是说读到文件最后的时候Buf不足1024,但BufSum还是1024,是不是还是有问题呢?
java流这部分一直不是很懂。