Java源码示例:org.apache.commons.compress.archivers.sevenz.SevenZFile

示例1
public static void decompress7z(File fromFile, File toDirectory) {
	try (SevenZFile archiveInputStream = new SevenZFile(fromFile)) {
		byte[] buffer = new byte[BUFFER_SIZE];
		ArchiveEntry archiveEntry;
		while (null != (archiveEntry = archiveInputStream.getNextEntry())) {
			File file = new File(toDirectory, archiveEntry.getName());
			try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
				int length = -1;
				while ((length = archiveInputStream.read(buffer)) != -1) {
					fileOutputStream.write(buffer, 0, length);
				}
			}
		}
	} catch (IOException exception) {
		throw new IllegalStateException("解压7Z异常:", exception);
	}
}
 
示例2
@Override
public void parse(File file) throws IOException {
    mEntries = new ArrayList<>();
    SevenZFile sevenZFile = new SevenZFile(file);

    SevenZArchiveEntry entry = sevenZFile.getNextEntry();
    while (entry != null) {
        if (entry.isDirectory()) {
            continue;
        }
        if (Utils.isImage(entry.getName())) {
            byte[] content = new byte[(int)entry.getSize()];
            sevenZFile.read(content);
            mEntries.add(new SevenZEntry(entry, content));
        }
        entry = sevenZFile.getNextEntry();
    }

    Collections.sort(mEntries, new NaturalOrderComparator() {
        @Override
        public String stringValue(Object o) {
            return ((SevenZEntry) o).entry.getName();
        }
    });
}
 
示例3
@Override
public void run() {
    try {
        SevenZFile sevenZFile = new SevenZFile(new File(filePath));
        SevenZArchiveEntry entry = sevenZFile.getNextEntry();
        while (entry != null) {
            if (entry.isDirectory()) {
                entry = sevenZFile.getNextEntry();
                continue;
            }
            String childName = "default_file";
            SevenZArchiveEntry entry1;
            for (Map<String, SevenZArchiveEntry> entryMap : entriesToBeExtracted) {
                childName = entryMap.keySet().iterator().next();
                entry1 = entryMap.values().iterator().next();
                if (entry.getName().equals(entry1.getName())) {
                    break;
                }
            }
            FileOutputStream out = new FileOutputStream(fileDir + childName);
            byte[] content = new byte[(int) entry.getSize()];
            sevenZFile.read(content, 0, content.length);
            out.write(content);
            out.close();
            entry = sevenZFile.getNextEntry();
        }
        sevenZFile.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    if (new File(filePath).exists()) {
        new File(filePath).delete();
    }
}
 
示例4
protected void unarchive7z(File srcFile) {
    try {
        try ( SevenZFile sevenZFile = new SevenZFile(srcFile)) {
            SevenZArchiveEntry entry;
            while ((entry = sevenZFile.getNextEntry()) != null) {
                if (entry.isDirectory()) {
                    continue;
                }
                if (verboseCheck == null || verboseCheck.isSelected()) {
                    updateLogs(message("Handling...") + ":   " + entry.getName());
                }
                File file = makeTargetFile(entry.getName(), targetPath);
                if (file == null) {
                    continue;
                }
                File parent = file.getParentFile();
                if (!parent.isDirectory() && !parent.mkdirs()) {
                    archiveFail++;
                    if (verboseCheck == null || verboseCheck.isSelected()) {
                        updateLogs(message("FailOpenFile" + ":" + file));
                    }
                    continue;
                }
                try ( FileOutputStream out = new FileOutputStream(file)) {
                    int length;
                    byte[] buf = new byte[CommonValues.IOBufferLength];
                    while ((length = sevenZFile.read(buf)) != -1) {
                        out.write(buf, 0, length);
                    }
                }
                archiveSuccess++;
                targetFileGenerated(file);
            }
        }
    } catch (Exception e) {
        archiveFail++;
        String s = e.toString();
        updateLogs(s);
        if (s.contains("java.nio.charset.MalformedInputException")
                || s.contains("Illegal char")) {
            updateLogs(message("CharsetIncorrect"));
            charsetIncorrect = true;
        }
    }
}
 
示例5
protected void unarchive7z() {
        try {
            if (selected == null || selected.isEmpty()) {
                return;
            }
            try ( SevenZFile sevenZFile = new SevenZFile(sourceFile)) {
                SevenZArchiveEntry entry;
                while ((entry = sevenZFile.getNextEntry()) != null) {
                    if (entry.isDirectory() || !selected.contains(entry.getName())) {
                        continue;
                    }
                    File file = makeTargetFile(entry.getName(), targetPath);
                    if (file == null) {
                        continue;
                    }
                    File parent = file.getParentFile();
                    if (!parent.isDirectory() && !parent.mkdirs()) {
                        archiveFail++;
//                        logger.debug(message("FailOpenFile" + ":" + file));
                        continue;
                    }
                    try ( FileOutputStream out = new FileOutputStream(file)) {
                        int length;
                        byte[] buf = new byte[CommonValues.IOBufferLength];
                        while ((length = sevenZFile.read(buf)) != -1) {
                            out.write(buf, 0, length);
                        }
                    }
                    archiveSuccess++;
                }
            }
        } catch (Exception e) {
            archiveFail++;
            archiveFail++;
            error = e.toString();
            if (error.contains("java.nio.charset.MalformedInputException")
                    || error.contains("Illegal char")) {
                charsetIncorrect = true;
            }
        }
    }
 
示例6
public String read7zFile(String filePath,String fileKey) {
    String archiveSeparator = "/";
    Map<String, FileNode> appender = Maps.newHashMap();
    List<String> imgUrls = Lists.newArrayList();
    String baseUrl= BaseUrlFilter.getBaseUrl();
    String archiveFileName = fileUtils.getFileNameFromPath(filePath);
    try {
        SevenZFile zipFile = new SevenZFile(new File(filePath));
        Iterable<SevenZArchiveEntry> entries = zipFile.getEntries();
        // 排序
        Enumeration<SevenZArchiveEntry> newEntries = sortSevenZEntries(entries);
        List<Map<String, SevenZArchiveEntry>> entriesToBeExtracted = Lists.newArrayList();
        while (newEntries.hasMoreElements()){
            SevenZArchiveEntry entry = newEntries.nextElement();
            String fullName = entry.getName();
            int level = fullName.split(archiveSeparator).length;
            // 展示名
            String originName = getLastFileName(fullName, archiveSeparator);
            String childName = level + "_" + originName;
            boolean directory = entry.isDirectory();
            if (!directory) {
                childName = archiveFileName + "_" + originName;
                entriesToBeExtracted.add(Collections.singletonMap(childName, entry));
            }
            String parentName = getLast2FileName(fullName, archiveSeparator, archiveFileName);
            parentName = (level-1) + "_" + parentName;
            FileType type=fileUtils.typeFromUrl(childName);
            if (type.equals(FileType.picture)){//添加图片文件到图片列表
                imgUrls.add(baseUrl+childName);
            }
            FileNode node = new FileNode(originName, childName, parentName, new ArrayList<>(), directory, fileKey);
            addNodes(appender, parentName, node);
            appender.put(childName, node);
        }
        // 开启新的线程处理文件解压
        executors.submit(new SevenZExtractorWorker(entriesToBeExtracted, filePath));
        fileUtils.putImgCache(fileKey,imgUrls);
        return new ObjectMapper().writeValueAsString(appender.get(""));
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
 
示例7
@Override
public FileTree sevenZipTree(Object sevenZipFile) {
    return sevenZipTree(sevenZipFile, f -> new SevenZipArchiveInputStream(new SevenZFile(f)));
}
 
示例8
@Override
public FileTree sevenZipTree(Object sevenZipFile, char[] password) {
    return sevenZipTree(sevenZipFile, f -> new SevenZipArchiveInputStream(new SevenZFile(f, password)));
}
 
示例9
@Override
public FileTree sevenZipTree(Object sevenZipFile) {
    return sevenZipTree(sevenZipFile, f -> new SevenZipArchiveInputStream(new SevenZFile(f)));
}
 
示例10
@Override
public FileTree sevenZipTree(Object sevenZipFile, char[] password) {
    return sevenZipTree(sevenZipFile, f -> new SevenZipArchiveInputStream(new SevenZFile(f, password)));
}
 
示例11
@Override
protected ArchiveInputStream createArchiveInputStream(File archive) throws IOException {
    return new SevenZInputStream(new SevenZFile(archive));
}
 
示例12
public SevenZInputStream(SevenZFile file) {
    this.file = file;
}