src/main/java/org/jboss/util/file/JarUtils.java
/**
    * <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 
    */
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.
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 .
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("/"))
      {
         if (prefix.charAt(0) == '/')
         {
            prefix = prefix.substring(1);
         }
         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 ( "/" ) ) { if ( prefix . charAt ( 0 ) == '/' ) { prefix = prefix . substring ( 1 ) ; } 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.
<P > This function will create a Jar archive containing the src file / directory .
// strip leading '/' // ensure trailing '/'