JarOutputStream.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /* JarOutputStream.java - OutputStream for writing jar files
  2. Copyright (C) 2000, 2004 Free Software Foundation, Inc.
  3. This file is part of GNU Classpath.
  4. GNU Classpath is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2, or (at your option)
  7. any later version.
  8. GNU Classpath is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GNU Classpath; see the file COPYING. If not, write to the
  14. Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  15. 02110-1301 USA.
  16. Linking this library statically or dynamically with other modules is
  17. making a combined work based on this library. Thus, the terms and
  18. conditions of the GNU General Public License cover the whole
  19. combination.
  20. As a special exception, the copyright holders of this library give you
  21. permission to link this library with independent modules to produce an
  22. executable, regardless of the license terms of these independent
  23. modules, and to copy and distribute the resulting executable under
  24. terms of your choice, provided that you also meet, for each linked
  25. independent module, the terms and conditions of the license of that
  26. module. An independent module is a module which is not derived from
  27. or based on this library. If you modify this library, you may extend
  28. this exception to your version of the library, but you are not
  29. obligated to do so. If you do not wish to do so, delete this
  30. exception statement from your version. */
  31. package java.util.jar;
  32. import java.io.IOException;
  33. import java.io.OutputStream;
  34. import java.util.zip.ZipEntry;
  35. import java.util.zip.ZipOutputStream;
  36. /**
  37. * OutputStream for writing jar files.
  38. * A special ZipOutputStream that can take JarEntries and can have a optional
  39. * Manifest as first entry.
  40. *
  41. * @author Mark Wielaard (mark@klomp.org)
  42. */
  43. public class JarOutputStream extends ZipOutputStream
  44. {
  45. // Constructors
  46. /**
  47. * Creates a new JarOutputStream without a manifest entry.
  48. *
  49. * @param out the stream to create the new jar on
  50. * @exception IOException if something unexpected happend
  51. */
  52. public JarOutputStream(OutputStream out) throws IOException
  53. {
  54. this(out, null);
  55. }
  56. /**
  57. * Creates a new JarOutputStream with a manifest entry.
  58. * The manifest will be the first entry in the jar.
  59. *
  60. * @param out the stream to create the new jar on
  61. * @param man the manifest that should be put in the jar file or null
  62. * for no manifest entry
  63. * @exception IOException if something unexpected happend
  64. */
  65. public JarOutputStream(OutputStream out, Manifest man) throws IOException
  66. {
  67. super(out);
  68. if (man != null)
  69. writeManifest(man);
  70. }
  71. // Methods
  72. /**
  73. * Writes the manifest to a new JarEntry in this JarOutputStream with as
  74. * name JarFile.MANIFEST_NAME.
  75. *
  76. * @param manifest the non null manifest to be written
  77. * @exception IOException if something unexpected happend
  78. */
  79. private void writeManifest(Manifest manifest) throws IOException
  80. {
  81. // Create a new Jar Entry for the Manifest
  82. JarEntry entry = new JarEntry(JarFile.MANIFEST_NAME);
  83. putNextEntry(entry);
  84. manifest.write(this);
  85. closeEntry();
  86. }
  87. /**
  88. * Prepares the JarOutputStream for writing the next entry.
  89. * This implementation just calls <code>super.putNextEntry()</code>.
  90. *
  91. * @param entry The information for the next entry
  92. * @exception IOException when some unexpected I/O exception occurred
  93. */
  94. public void putNextEntry(ZipEntry entry) throws IOException
  95. {
  96. super.putNextEntry(entry); // XXX
  97. }
  98. }