code: public static void copyDirectory(File srcDir, File destDir, FileFilter filter) throws IOException {
  		copyDirectory(srcDir, destDir, filter, true);
  	}
docs: Copies a filtered directory to a new location preserving the file dates.
  <p>
  This method copies the contents of the specified source directory to
  within the specified destination directory.
  <p>
  The destination directory is created if it does not exist. If the
  destination directory did exist, then this method merges the source with
  the destination, with the source taking precedence.
  
  <h4>Example: Copy directories only</h4>
  
  <pre>
  // only copy the directory structure
  FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);
  </pre>
  
  <h4>Example: Copy directories and txt files</h4>
  
  <pre>
  // Create a filter for ".txt" files
  IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
  IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, txtSuffixFilter);
  
  // Create a filter for either directories or ".txt" files
  FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);
  
  // Copy using the filter
  FileUtils.copyDirectory(srcDir, destDir, filter);
  </pre>
  
  @param srcDir
  an existing directory to copy, must not be <code>null</code>
  @param destDir
  the new directory, must not be <code>null</code>
  @param filter
  the filter to apply, null means copy all directories and files
  should be the same as the original
  
  @throws NullPointerException
  if source or destination is <code>null</code>
  @throws IOException
  if source or destination is invalid
  @throws IOException
  if an IO error occurs during copying
  @since Commons IO 1.4