java多线程压缩一个文件夹,java - 使用Java ParallelScatterZipCreator快速压缩文件夹 - 堆栈内存溢出...

或初始化InputStreamSupplier的值是什么? 我试图将所有文件压缩到一个目录中,这应该很快。 所以多线程是我要的选择。

public class ScatterSample {

ParallelScatterZipCreator scatterZipCreator = new ParallelScatterZipCreator();

ScatterZipOutputStream dirs = ScatterZipOutputStream.fileBased(File.createTempFile("scatter-dirs", "tmp"));

public ScatterSample() throws IOException {

}

public void addEntry(ZipArchiveEntry zipArchiveEntry, InputStreamSupplier streamSupplier) throws IOException {

if (zipArchiveEntry.isDirectory() && !zipArchiveEntry.isUnixSymlink())

dirs.addArchiveEntry(ZipArchiveEntryRequest.createZipArchiveEntryRequest(zipArchiveEntry, streamSupplier));

else

scatterZipCreator.addArchiveEntry( zipArchiveEntry, streamSupplier);

}

public void writeTo(ZipArchiveOutputStream zipArchiveOutputStream)

throws IOException, ExecutionException, InterruptedException {

dirs.writeTo(zipArchiveOutputStream);

dirs.close();

scatterZipCreator.writeTo(zipArchiveOutputStream);

}

}

FirstMain类:

public class FirstMain {

public FirstMain() {

// TODO Auto-generated constructor stub

}

public static void compressFolder(String sourceFolder, String absoluteZipfilepath)

{

try

{

ScatterSample scatterSample=new ScatterSample();

File srcFolder = new File(sourceFolder);

if(srcFolder != null && srcFolder.isDirectory())

{

Iterator i = FileUtils.iterateFiles(srcFolder, new String []{"pdf"}, true);

File zipFile = new File(absoluteZipfilepath);

OutputStream outputStream = new FileOutputStream(zipFile);

ZipArchiveOutputStream zipArchiveOutputStream= new ZipArchiveOutputStream(outputStream);

int srcFolderLength = srcFolder.getAbsolutePath().length() + 1; // +1 to remove the last file separator

while(i.hasNext())

{

File file = i.next();

String relativePath = file.getAbsolutePath().substring(srcFolderLength);

InputStreamSupplier streamSupplier=new InputStreamSupplier(){

@Override

public InputStream get() {

// TODO Auto-generated method stub

return null;

}

};

ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(relativePath);

scatterSample.addEntry(zipArchiveEntry, streamSupplier);

}

scatterSample.writeTo(zipArchiveOutputStream);

}

}catch (Exception e) {

e.printStackTrace();

}

}

public static void main( String[] args )

{

compressFolder("C:\\Users\\akatm\\Desktop\\Stuff\\zipdata\\Newtry\\","C:/Users/akatm/Desktop/Stuff/Newtry.zip");

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值