OSDN Git Service

1999-08-09 Anthony Green <green@cygnus.com>
[pf3gnuchains/gcc-fork.git] / libjava / gnu / gcj / util / path / ZipPathEntry.java
diff --git a/libjava/gnu/gcj/util/path/ZipPathEntry.java b/libjava/gnu/gcj/util/path/ZipPathEntry.java
new file mode 100644 (file)
index 0000000..ac02262
--- /dev/null
@@ -0,0 +1,86 @@
+// ZipPathEntry.java -- search path element for directories
+
+/* Copyright (C) 1999  Cygnus Solutions
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+/* Author: Kresten Krab Thorup <krab@gnu.org>  */
+
+package gnu.gcj.util.path;
+
+import java.util.*;
+import java.util.zip.*;
+import java.io.*;
+import java.net.*;
+
+
+final class ZipPathEntry extends PathEntry {
+    final ZipFile zip;
+    final URL     file;
+
+    public String toString () { return zip.getName (); }
+
+    ZipPathEntry (File f) 
+       throws MalformedURLException, ZipException, IOException
+    {
+       file = new URL ("file", "", f.getPath ());
+       zip  = new ZipFile (f);
+       zip.readDirectory ();
+    }
+
+    /* 
+       The url for a zip-file resource is,
+          
+       <code>file:///path/file.zip#name</code>
+          
+       Then, it is URLConnection's problem to handle that.
+    */
+
+    URL getURL (String f) {
+
+       ZipEntry ent = zip.getEntry (f);
+
+       try {
+           if (ent != null)
+               return new URL (file, "#"+f);
+           else
+               return null;
+       } catch (IOException x) {
+           return null;
+       }
+    }
+
+    InputStream getStream (String f) {
+
+       ZipEntry ent = zip.getEntry (f);
+
+       try {
+           if (ent != null)
+               return zip.getInputStream (ent);
+           else
+               return null;
+       } catch (IOException x) {
+           return null;
+       }
+    }
+
+    byte[] getBytes (String f) {
+       ZipEntry ent = zip.getEntry (f);
+
+       try {
+           if (ent != null)
+               return readbytes (zip.getInputStream (ent),
+                                 (int) ent.getSize ());
+           else
+               return null;
+       } catch (IOException x) {
+           return null;
+       }
+           
+    }
+}
+