java 多级文件压缩_java实现多个文件压缩成压缩包

本文实例为大家分享了java实现多个文件压缩的具体代码,供大家参考,具体内容如下

需要用到的ant.jar

package util;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.List;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

import java.util.zip.ZipOutputStream;

public class ZipTools {

public static final String ZIP_FILENAME = ""; //需要解压缩的文件名

public static final String ZIP_DIR = ""; //需要压缩的文件夹

public static final String UN_ZIP_DIR = ""; //要解压的文件目录

public static final int BUFFER = 1024 ; //缓存大小

public static void zipFile(String baseDir,String fileName) throws Exception{

List fileList=getSubFiles(new File(baseDir));

ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));

ZipEntry ze=null;

byte[] buf=new byte[BUFFER];

int readLen=0;

for(int i = 0; i

File f=(File)fileList.get(i);

ze=new ZipEntry(getAbsFileName(baseDir,f));

ze.setSize(f.length());

ze.setTime(f.lastModified());

zos.putNextEntry(ze);

InputStream is=new BufferedInputStream(new FileInputStream(f));

while ((readLen=is.read(buf,BUFFER))!=-1) {

zos.write(buf,readLen);

}

is.close();

}

zos.close();

}

private static String getAbsFileName(String baseDir,File realFileName){

File real=realFileName;

File base=new File(baseDir);

String ret=real.getName();

while (true) {

real=real.getParentFile();

if(real==null)

break;

if(real.equals(base))

break;

else

ret=real.getName()+"/"+ret;

}

return ret;

}

private static List getSubFiles(File baseDir){

List ret=new ArrayList();

File[] tmp=baseDir.listFiles();

for (int i = 0; i

if(tmp[i].isFile())

ret.add(tmp[i]);

if(tmp[i].isDirectory())

ret.addAll(getSubFiles(tmp[i]));

}

return ret;

}

public static void upZipFile() throws Exception{

ZipFile zfile=new ZipFile(ZIP_FILENAME);

Enumeration zList=zfile.entries();

ZipEntry ze=null;

byte[] buf=new byte[1024];

while(zList.hasMoreElements()){

ze=(ZipEntry)zList.nextElement();

if(ze.isDirectory()){

File f=new File(ZIP_DIR+ze.getName());

f.mkdir();

continue;

}

OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR,ze.getName())));

InputStream is=new BufferedInputStream(zfile.getInputStream(ze));

int readLen=0;

while ((readLen=is.read(buf,1024))!=-1) {

os.write(buf,readLen);

}

is.close();

os.close();

}

zfile.close();

}

public static File getRealFileName(String baseDir,String absFileName){

String[] dirs=absFileName.split("/");

File ret=new File(baseDir);

if(dirs.length>1){

for (int i = 0; i < dirs.length-1;i++) {

ret=new File(ret,dirs[i]);

}

if(!ret.exists())

ret.mkdirs();

ret=new File(ret,dirs[dirs.length-1]);

return ret;

}

return ret;

}

public static void deleteDirFile(String path){

File file=new File(path);

if(file.isDirectory()){ //如果是目录,先递归删除

String[] list=file.list();

for(int i=0;i

deleteDirFile(path+"\\"+list[i]); //先删除目录下的文件

}

}

file.delete();

}

public static String newFolder(String dir){

java.io.File myFilePath=new java.io.File(dir);

if(myFilePath.isDirectory()){}else{

myFilePath.mkdirs();

}

return dir;

}

public static String getFileNames(String path){

File file = new File(path); // get file list where the path has

File[] array = file.listFiles(); // 获得文件列表

String pdfNames="";

for(int i=0;i

if(array[i].isFile()){

if(array[i].getName().endsWith(".pdf")){ //获得pdf文件名称

pdfNames+=array[i].getName().substring(0,array[i].getName().length()-4)+",";

}

}

}

if(pdfNames.length()>0){

pdfNames.substring(0,pdfNames.length()-1);

}

return pdfNames;

}

public static void copyFile(String oldPath,String newPath) {

try {

int bytesum = 0;

int byteread = 0;

File oldfile = new File(oldPath);

if (oldfile.exists()) { //文件存在时

InputStream inStream = new FileInputStream(oldPath); //读入原文件

FileOutputStream fs = new FileOutputStream(newPath);

byte[] buffer = new byte[1444];

while ( (byteread = inStream.read(buffer)) != -1) {

bytesum += byteread; //字节数文件大小

fs.write(buffer,byteread);

}

inStream.close();

}

}

catch (Exception e) {

System.out.println("copy file error!");

e.printStackTrace();

}

}

public static boolean fileExist(String fileNames,String pdfName){

boolean flag=false;

if(!"".equals(fileNames)){

String[] nameArr=fileNames.split(",");

for(int i=0;i

if(pdfName.equals(nameArr[i])){ //如果文件名相同则执行拷贝操作(拷贝到zip目录准备打包)

flag=true;

break;

}

}

}

return flag;

}

public static void deleteFileAndDir(String path){

File file = new File(path);

File[] array = file.listFiles();

for(int i=0;i

if(array[i].isFile()){

array[i].delete();

}else if(array[i].isDirectory()){

deleteDirFile(array[i].getPath());

}

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

相关文章

总结

以上是编程之家为你收集整理的java实现多个文件压缩成压缩包全部内容,希望文章能够帮你解决java实现多个文件压缩成压缩包所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。   public class ZipDemo extends JFrame{   JFileChooser fileChooser; //文件选择器   JList fileList; //待压缩文件列表   Vector files; //文件数据(待压缩文件)   JButton jbAdd; //增加文件按钮   JButton jbDelete; //删除文件按钮   JButton jbZip; //压缩按钮   JTextField target; //目标文件文本域   public ZipDemo(){   super("用ZIP压缩多个文件"); //调用父类构造函数   fileChooser=new JFileChooser(); //实例化文件选择器   files=new Vector(); //实例化文件数据Vector   fileList=new JList(files); //实例化已选择文件列表   jbAdd=new JButton("增加"); //实例化按钮组件   jbDelete=new JButton("删除");   jbZip=new JButton("压缩");   target=new JTextField(18);   JPanel panel=new JPanel(); //实例化面板,用于容纳按钮   panel.add(jbAdd); //增加组件到面板上   panel.add(jbDelete);   panel.add(jbZip);   JPanel panel2=new JPanel();   panel2.add(new JLabel("目标文件"));   panel2.add(target);   JScrollPane jsp=new JScrollPane(fileList);   Container container=getContentPane(); //得到容器   container.add(panel2,BorderLayout.NORTH); //增加组件到容器   container.add(jsp,BorderLayout.CENTER);   container.add(panel,BorderLayout.SOUTH);   jsp.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); //设置边界
好的,对于Java导出多个Excel表生成多级目录压缩包的需求,您可以按照以下步骤实现: 1. 首先,您需要使用Java操作Excel表格,这里推荐使用Apache POI库。您可以使用POI库读取Excel表格中的数据,也可以使用POI库创建新的Excel表格。 2. 接下来,您需要将生成的Excel表格按照要求组织成多级目录结构。您可以使用Java的File类来创建文件夹和文件,将生成的Excel表格存放在对应的文件夹中。 3. 最后,您需要使用Java的ZipOutputStream类将生成的文件夹和文件压缩成一个多级目录的压缩包。ZipOutputStream类可以将多个文件文件压缩成一个压缩包,同时可以设置压缩包的名称和路径。 以下是一个示例代码,用于将两个Excel表格导出并生成多级目录压缩包: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; public class ExcelExport { public static void main(String[] args) { // 创建两个Excel表格 Workbook workbook1 = new HSSFWorkbook(); Sheet sheet1 = workbook1.createSheet("Sheet1"); Row row1 = sheet1.createRow(0); Cell cell1 = row1.createCell(0); cell1.setCellValue("Hello"); Workbook workbook2 = new HSSFWorkbook(); Sheet sheet2 = workbook2.createSheet("Sheet2"); Row row2 = sheet2.createRow(0); Cell cell2 = row2.createCell(0); cell2.setCellValue("World"); // 创建目录结构 File dir = new File("export"); dir.mkdir(); File subDir1 = new File(dir, "subdir1"); subDir1.mkdir(); File subDir2 = new File(subDir1, "subdir2"); subDir2.mkdir(); // 保存Excel表格到文件夹中 try { FileOutputStream fileOut1 = new FileOutputStream(new File(subDir2, "file1.xls")); workbook1.write(fileOut1); fileOut1.close(); FileOutputStream fileOut2 = new FileOutputStream(new File(subDir2, "file2.xls")); workbook2.write(fileOut2); fileOut2.close(); } catch (IOException e) { e.printStackTrace(); } // 压缩文件夹为多级目录压缩包 String zipFileName = "export.zip"; try { FileOutputStream fileOut = new FileOutputStream(zipFileName); ZipOutputStream zipOut = new ZipOutputStream(fileOut); addToZip(subDir1, "", zipOut); zipOut.close(); fileOut.close(); } catch (IOException e) { e.printStackTrace(); } } private static void addToZip(File file, String parentDir, ZipOutputStream zipOut) throws IOException { String filePath = parentDir + file.getName(); if (file.isDirectory()) { if (!filePath.isEmpty()) { ZipEntry zipEntry = new ZipEntry(filePath + "/"); zipOut.putNextEntry(zipEntry); zipOut.closeEntry(); } for (File subFile : file.listFiles()) { addToZip(subFile, filePath + "/", zipOut); } } else { FileInputStream fileIn = new FileInputStream(file); ZipEntry zipEntry = new ZipEntry(filePath); zipOut.putNextEntry(zipEntry); byte[] buf = new byte[1024]; int len; while ((len = fileIn.read(buf)) > 0) { zipOut.write(buf, 0, len); } fileIn.close(); zipOut.closeEntry(); } } } ``` 在这个示例代码中,我们创建了两个Excel表格,然后将它们保存在一个名为"export"的文件夹中,同时按照要求组织了多级目录结构。最后,我们使用ZipOutputStream类将"export"文件压缩成一个名为"export.zip"的多级目录压缩包

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值