@Override public void takeAction(SevenZFile archive, SevenZArchiveEntry entry) throws IOException { File outFile = new File(entry.getName()); if (entry.isDirectory()) { if (!outFile.isDirectory() && !outFile.mkdirs()) { throw new IOException("Cannot create directory " + outFile); } System.out.println("created directory " + outFile); return; } System.out.println("extracting to " + outFile); File parent = outFile.getParentFile(); if (parent != null && !parent.exists() && !parent.mkdirs()) { throw new IOException("Cannot create " + parent); } FileOutputStream fos = new FileOutputStream(outFile); try { final long total = entry.getSize(); long off = 0; while (off < total) { int toRead = (int) Math.min(total - off, BUF.length); int bytesRead = archive.read(BUF, 0, toRead); if (bytesRead < 1) { throw new IOException( "reached end of entry " + entry.getName() + " after " + off + " bytes, expected " + total); } off += bytesRead; fos.write(BUF, 0, bytesRead); } } finally { fos.close(); } }
private String getContentMethods(SevenZArchiveEntry entry) { StringBuilder sb = new StringBuilder(); boolean first = true; for (SevenZMethodConfiguration m : entry.getContentMethods()) { if (!first) { sb.append(", "); } first = false; sb.append(m.getMethod()); if (m.getOptions() != null) { sb.append("(" + m.getOptions() + ")"); } } return sb.toString(); }
@Override public void takeAction(SevenZFile archive, SevenZArchiveEntry entry) { System.out.print(entry.getName()); if (entry.isDirectory()) { System.out.print(" dir"); } else { System.out.print(" " + entry.getCompressedSize() + "/" + entry.getSize()); } if (entry.getHasLastModifiedDate()) { System.out.print(" " + entry.getLastModifiedDate()); } else { System.out.print(" no last modified date"); } if (!entry.isDirectory()) { System.out.println(" " + getContentMethods(entry)); } else { System.out.println(""); } }