File Input Output Java

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
//Revised from apache cxf 
public class Main {
  /**
   * Load a given resource. 

 This method will try to load the resource
   * using the following methods (in order):
   * 


       * 
  • From Thread.currentThread().getContextClassLoader()
       * 
  • From ClassLoaderUtil.class.getClassLoader()
       * 
  • callingClass.getClassLoader()
       * 

   * 
   * @param resourceName The name of the resource to load
   * @param callingClass The Class object of the calling object
   */
  public static URL getResource(String resourceName, Class callingClass) {
      URL url = Thread.currentThread().getContextClassLoader().getResource(resourceName);
      if (url == null && resourceName.startsWith("/")) {
          //certain classloaders need it without the leading /
          url = Thread.currentThread().getContextClassLoader()
              .getResource(resourceName.substring(1));
      }
      ClassLoader cluClassloader = Main.class.getClassLoader();
      if (cluClassloader == null) {
          cluClassloader = ClassLoader.getSystemClassLoader();
      }
      if (url == null) {
          url = cluClassloader.getResource(resourceName);
      }
      if (url == null && resourceName.startsWith("/")) {
          //certain classloaders need it without the leading /
          url = cluClassloader.getResource(resourceName.substring(1));
      }
      if (url == null) {
          ClassLoader cl = callingClass.getClassLoader();
          if (cl != null) {
              url = cl.getResource(resourceName);
          }
      }
      if (url == null) {
          url = callingClass.getResource(resourceName);
      }
      
      if ((url == null) && (resourceName != null) && (resourceName.charAt(0) != '/')) {
          return getResource('/' + resourceName, callingClass);
      }
      return url;
  }
  
  /**
   * This is a convenience method to load a resource as a stream. 

 The
   * algorithm used to find the resource is given in getResource()
   * 
   * @param resourceName The name of the resource to load
   * @param callingClass The Class object of the calling object
   */
  public static InputStream getResourceAsStream(String resourceName, Class callingClass) {
      URL url = getResource(resourceName, callingClass);
      try {
          return (url != null) ? url.openStream() : null;
      } catch (IOException e) {
          return null;
      }
  }
  /**
   * Load a given resources. 

 This method will try to load the resources
   * using the following methods (in order):
   * 


       * 
  • From Thread.currentThread().getContextClassLoader()
       * 
  • From ClassLoaderUtil.class.getClassLoader()
       * 
  • callingClass.getClassLoader()
       * 

   * 
   * @param resourceName The name of the resource to load
   * @param callingClass The Class object of the calling object
   */
  public static List getResources(String resourceName, Class callingClass) {
      List ret = new ArrayList();
      Enumeration urls = new Enumeration() {
          public boolean hasMoreElements() {
              return false;
          }
          public URL nextElement() {
              return null;
          }
          
      };
      try {
          urls = Thread.currentThread().getContextClassLoader()
              .getResources(resourceName);
      } catch (IOException e) {
          //ignore
      }
      if (!urls.hasMoreElements() && resourceName.startsWith("/")) {
          //certain classloaders need it without the leading /
          try {
              urls = Thread.currentThread().getContextClassLoader()
                  .getResources(resourceName.substring(1));
          } catch (IOException e) {
              // ignore
          }
      }
      ClassLoader cluClassloader = Main.class.getClassLoader();
      if (cluClassloader == null) {
          cluClassloader = ClassLoader.getSystemClassLoader();
      }
      if (!urls.hasMoreElements()) {
          try {
              urls = cluClassloader.getResources(resourceName);
          } catch (IOException e) {
              // ignore
          }
      }
      if (!urls.hasMoreElements() && resourceName.startsWith("/")) {
          //certain classloaders need it without the leading /
          try {
              urls = cluClassloader.getResources(resourceName.substring(1));
          } catch (IOException e) {
              // ignore
          }
      }
      if (!urls.hasMoreElements()) {
          ClassLoader cl = callingClass.getClassLoader();
          if (cl != null) {
              try {
                  urls = cl.getResources(resourceName);
              } catch (IOException e) {
                  // ignore
              }
          }
      }
      if (!urls.hasMoreElements()) {
          URL url = callingClass.getResource(resourceName);
          if (url != null) {
              ret.add(url);
          }
      }
      while (urls.hasMoreElements()) {
          ret.add(urls.nextElement());
      }
      
      if (ret.isEmpty() && (resourceName != null) && (resourceName.charAt(0) != '/')) {
          return getResources('/' + resourceName, callingClass);
      }
      return ret;
  }
}