gpt4 book ai didi

java - 在 java 中解压扩展名为 .7z 的文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:32 27 4
gpt4 key购买 nike

有人可以建议(举例)任何适当且易于理解的方式来提取基于 InputStream 的一个或多个扩展名为 .7z 的文件。我已经检查了 XZ for java api,但没有成功。等待任何建议。

最佳答案

此代码可能对您有所帮助。

    import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

import net.sf.sevenzipjbinding.ExtractOperationResult;
import net.sf.sevenzipjbinding.ISequentialOutStream;
import net.sf.sevenzipjbinding.ISevenZipInArchive;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.SevenZipException;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;
import net.sf.sevenzipjbinding.simple.ISimpleInArchive;
import net.sf.sevenzipjbinding.simple.ISimpleInArchiveItem;

public class unzip {
public static void main(String[] args) {

RandomAccessFile randomAccessFile = null;
ISevenZipInArchive inArchive = null;

try {
randomAccessFile = new RandomAccessFile("oclHashcat-plus-0.14.7z", "r");
inArchive = SevenZip.openInArchive(null, // autodetect archive type
new RandomAccessFileInStream(randomAccessFile));

// Getting simple interface of the archive inArchive
ISimpleInArchive simpleInArchive = inArchive.getSimpleInterface();

System.out.println(" Hash | Size | Filename");
System.out.println("----------+------------+---------");

for (final ISimpleInArchiveItem item : simpleInArchive.getArchiveItems()) {
final int[] hash = new int[] { 0 };
if (!item.isFolder()) {
ExtractOperationResult result;

final long[] sizeArray = new long[1];
result = item.extractSlow(new ISequentialOutStream() {
public int write(byte[] data) throws SevenZipException {

//Write to file
FileOutputStream fos;
try {
File file = new File(item.getPath());
file.getParentFile().mkdirs();
fos = new FileOutputStream(file);
fos.write(data);
fos.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

hash[0] ^= Arrays.hashCode(data); // Consume data
sizeArray[0] += data.length;
return data.length; // Return amount of consumed data
}
});
if (result == ExtractOperationResult.OK) {
System.out.println(String.format("%9X | %10s | %s", //
hash[0], sizeArray[0], item.getPath()));
} else {
System.err.println("Error extracting item: " + result);
}
}
}
} catch (Exception e) {
System.err.println("Error occurs: " + e);
System.exit(1);
} finally {
if (inArchive != null) {
try {
inArchive.close();
} catch (SevenZipException e) {
System.err.println("Error closing archive: " + e);
}
}
if (randomAccessFile != null) {
try {
randomAccessFile.close();
} catch (IOException e) {
System.err.println("Error closing file: " + e);
}
}
}
}
}

关于java - 在 java 中解压扩展名为 .7z 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com