From: <pat...@us...> - 2011-02-11 13:38:43
|
Revision: 1206 http://cishell.svn.sourceforge.net/cishell/?rev=1206&view=rev Author: pataphil Date: 2011-02-11 13:38:37 +0000 (Fri, 11 Feb 2011) Log Message: ----------- * Added CollectionUtilities.collectionEnumerationElements * Added MapUtilities.mapKeyToIndices * Added ZipIOException and ZipUtilities * Not reviewed. Modified Paths: -------------- trunk/core/org.cishell.utilities/src/org/cishell/utilities/CollectionUtilities.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java Added Paths: ----------- trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipIOException.java trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipUtilities.java Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/CollectionUtilities.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/CollectionUtilities.java 2011-02-11 13:37:40 UTC (rev 1205) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/CollectionUtilities.java 2011-02-11 13:38:37 UTC (rev 1206) @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Dictionary; +import java.util.Enumeration; import java.util.Iterator; public class CollectionUtilities { @@ -31,4 +32,13 @@ public static<T> T get(Collection<T> values, int index) { return (T) values.toArray()[index]; } + + public static<T> Collection<T> collectionEnumerationElements( + Enumeration<T> source, Collection<T> target) { + while (source.hasMoreElements()) { + target.add(source.nextElement()); + } + + return target; + } } Modified: trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java 2011-02-11 13:37:40 UTC (rev 1205) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/MapUtilities.java 2011-02-11 13:38:37 UTC (rev 1206) @@ -64,6 +64,16 @@ return valuesByIndex; } + public static<K> Map<K, Integer> mapKeyToIndices(List<K> keys) { + Map<K, Integer> indexByKeys = new HashMap<K, Integer>(); + + for (int ii = 0; ii < keys.size(); ii++) { + indexByKeys.put(keys.get(ii), ii); + } + + return indexByKeys; + } + public static<K, V> void valuesByKeys( Map<K, V> items, Collection<K> keys, Collection<V> target) { for (K key : keys) { Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipIOException.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipIOException.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipIOException.java 2011-02-11 13:38:37 UTC (rev 1206) @@ -0,0 +1,21 @@ +package org.cishell.utilities; + +public class ZipIOException extends Exception { + private static final long serialVersionUID = 1L; + + public ZipIOException() { + super(); + } + + public ZipIOException(String arg0) { + super(arg0); + } + + public ZipIOException(Throwable arg0) { + super(arg0); + } + + public ZipIOException(String arg0, Throwable arg1) { + super(arg0, arg1); + } +} \ No newline at end of file Added: trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipUtilities.java =================================================================== --- trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipUtilities.java (rev 0) +++ trunk/core/org.cishell.utilities/src/org/cishell/utilities/ZipUtilities.java 2011-02-11 13:38:37 UTC (rev 1206) @@ -0,0 +1,143 @@ +package org.cishell.utilities; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; + +public class ZipUtilities { + static final int BUFFER_SIZE = 2048; + + public static void zipFiles(Collection<File> files, ZipOutputStream zipOut) + throws ZipIOException { + try { + for (File file : files) { + writeFileToZipFile(file, zipOut); + } + + zipOut.close(); + } catch (IOException e) { + throw new ZipIOException(e.getMessage(), e); + } + } + + public static void zipFiles(Collection<File> files, File targetZipFile) + throws ZipIOException { + try { + zipFiles( + files, + new ZipOutputStream( + new BufferedOutputStream(new FileOutputStream(targetZipFile)))); + } catch (FileNotFoundException e) { + throw new ZipIOException(e.getMessage(), e); + } + } + + public static void writeFileToZipFile(File file, ZipOutputStream zipOut) + throws ZipIOException { + try { + byte data[] = new byte[BUFFER_SIZE]; + BufferedInputStream fileInput = + new BufferedInputStream(new FileInputStream(file), BUFFER_SIZE); + ZipEntry entry = new ZipEntry(file.getName()); + zipOut.putNextEntry(entry); + int count; + + while ((count = fileInput.read(data, 0, BUFFER_SIZE)) != -1) { + zipOut.write(data, 0, count); + } + + fileInput.close(); + } catch (FileNotFoundException e) { + throw new ZipIOException(e.getMessage(), e); + } catch (IOException e) { + throw new ZipIOException(e.getMessage(), e); + } + } + + public static File readFileFromZipFile(ZipEntry entry, ZipFile zipFile) throws IOException { + long size = entry.getSize(); + + if (size > 0) { + BufferedInputStream reader = new BufferedInputStream(zipFile.getInputStream(entry)); + String fileName = new File(entry.getName()).getName(); + File outputFile = + FileUtilities.createTemporaryFileInDefaultTemporaryDirectory(fileName, ""); + BufferedOutputStream output = + new BufferedOutputStream(new FileOutputStream(outputFile), BUFFER_SIZE); + + byte readBytes[] = new byte[BUFFER_SIZE]; + int readByteCount; + + while ((readByteCount = reader.read(readBytes, 0, BUFFER_SIZE)) != -1) { + output.write(readBytes, 0, readByteCount); + } + + output.close(); + + return outputFile; + } else { + return null; + } + } + + public static Map<String, ZipEntry> mapFileNamesToEntries( + ZipFile zipFile, boolean includeDirectories) throws IOException { + Collection<ZipEntry> entries = collectEntries(zipFile); + Map<String, ZipEntry> fileNamesToEntries = new HashMap<String, ZipEntry>(); + + for (ZipEntry entry : entries) { + if (includeDirectories) { + if (entry.isDirectory()) { + fileNamesToEntries.put(entry.getName(), entry); + } + } else if (!entry.isDirectory()) { + fileNamesToEntries.put(entry.getName(), entry); + } + } + + return fileNamesToEntries; + } + + @SuppressWarnings("unchecked") + public static Collection<ZipEntry> collectEntries(ZipFile zipFile) throws IOException { + Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zipFile.entries(); + + return CollectionUtilities.collectionEnumerationElements( + entries, new ArrayList<ZipEntry>()); + } + + public static void main(String[] args) { + String filePath = + "C:\\Documents and Settings\\pataphil\\Desktop\\org.cishell.utility.swt.zip"; + + try { + ZipFile zipFile = new ZipFile(filePath); + Map<String, ZipEntry> entriesByName = mapFileNamesToEntries(zipFile, false); + + int count = 0; + for (String key : entriesByName.keySet()) { + System.err.println(key + ": " + entriesByName.get(key)); + count++; + + if (count == 2) { + readFileFromZipFile(entriesByName.get(key), zipFile); + } + } + } catch (IOException e) { + System.err.println("Exception: " + e.getMessage()); + e.printStackTrace(); + } + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |