src/main/java/org/jboss/util/file/JarUtils.java
public static void jar(OutputStream out, File[] src, FileFilter filter,
      String prefix, Manifest man) throws IOException
   {
      
      for (int i = 0; i < src.length; i++)
      {
         if (!src[i].exists())
         {
            throw new FileNotFoundException(src.toString());
         }
      }
      
      JarOutputStream jout;
      if (man == null)
      {
         jout = new JarOutputStream(out);
      }
      else
      {
         jout = new JarOutputStream(out, man);
      }
      if (prefix != null && prefix.length() > 0 && !prefix.equals("/"))
      {
         // strip leading '/'
         if (prefix.charAt(0) == '/')
         {
            prefix = prefix.substring(1);
         }
         // ensure trailing '/'
         if (prefix.charAt(prefix.length() - 1) != '/')
         {
            prefix = prefix + "/";
         }
      } 
      else
      {
         prefix = "";
      }
      JarInfo info = new JarInfo(jout, filter);
      for (int i = 0; i < src.length; i++)
      {
         jar(src[i], prefix, info);
      }
      jout.close();
   }
public static void jar(OutputStream out, File[] src, FileFilter filter,
      String prefix, Manifest man) throws IOException
   {
      
      for (int i = 0; i < src.length; i++)
      {
         if (!src[i].exists())
         {
            throw new FileNotFoundException(src.toString());
         }
      }
      
      JarOutputStream jout;
      if (man == null)
      {
         jout = new JarOutputStream(out);
      }
      else
      {
         jout = new JarOutputStream(out, man);
      }
      if (prefix != null && prefix.length() > 0 && !prefix.equals("/"))
      {
         // strip leading '/'
         if (prefix.charAt(0) == '/')
         {
            prefix = prefix.substring(1);
         }
         // ensure trailing '/'
         if (prefix.charAt(prefix.length() - 1) != '/')
         {
            prefix = prefix + "/";
         }
      } 
      else
      {
         prefix = "";
      }
      JarInfo info = new JarInfo(jout, filter);
      for (int i = 0; i < src.length; i++)
      {
         jar(src[i], prefix, info);
      }
      jout.close();
   }
public static void jar ( OutputStream out , File [ ] src , FileFilter filter , String prefix , Manifest man ) throws IOException { for ( int i = 0 ; i < src . length ; i ++ ) { if ( ! src [ i ] . exists ( ) ) { throw new FileNotFoundException ( src . toString ( ) ) ; } } JarOutputStream jout ; if ( man == null ) { jout = new JarOutputStream ( out ) ; } else { jout = new JarOutputStream ( out , man ) ; } if ( prefix != null && prefix . length ( ) > 0 && ! prefix . equals ( "/" ) ) { // strip leading '/' if ( prefix . charAt ( 0 ) == ' ' ) { prefix = prefix . substring ( 1 ) ; } // ensure trailing '/' if ( prefix . charAt ( prefix . length ( ) - 1 ) != ' ' ) { prefix = prefix + "/" ; } } else { prefix = "" ; } JarInfo info = new JarInfo ( jout , filter ) ; for ( int i = 0 ; i < src . length ; i ++ ) { jar ( src [ i ] , prefix , info ) ; } jout . close ( ) ; }
<P>This function will create a Jar archive containing the src
file/directory.  The archive will be written to the specified
OutputStream.  Directories are processed recursively, applying the
specified filter if it exists.

@param out The output stream to which the generated Jar archive is
written.
@param src The file or directory to jar up.  Directories will be
processed recursively.
@param filter The filter to use while processing directories.  Only
those files matching will be included in the jar archive.  If
null, then all files are included.
@param prefix The name of an arbitrary directory that will precede all
entries in the jar archive.  If null, then no prefix will be
used.
@param man The manifest to use for the Jar archive.  If null, then no
manifest will be included.
@throws IOException
<P > This function will create a Jar archive containing the src file / directory . The archive will be written to the specified OutputStream . Directories are processed recursively applying the specified filter if it exists .