code: public static void copyDirectory(File sourceLocation, File targetLocation) throws IOException {
  
          if (sourceLocation.isDirectory()) {
              if (!targetLocation.exists()) {
                  if (targetLocation.mkdir() == false) {
                      logger.debug("Creating target directory " + targetLocation + " failed.");
                  }
              }
  
              String[] children = sourceLocation.list();
              if (children == null) {
                  return;
              }
  
              for (int i = 0; i < children.length; i++) {
                  copyDirectory(new File(sourceLocation, children[i]), new File(targetLocation, children[i]));
              }
          } else {
              FileInputStream in = null;
              FileOutputStream out = null;
              try {
                  in = new FileInputStream(sourceLocation);
                  out = new FileOutputStream(targetLocation);
                  copyStream(in, out);
              } finally {
                  if (in != null) {
                      in.close();
                  }
                  if (out != null) {
                      out.close();
                  }
              }
          }
      }
docs: If targetLocation does not exist, it will be created.