Mega Code Archive

 
Categories / Java Tutorial / Network
 

Make a URL from the given string

import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLDecoder; import java.util.Map; /*   * JBoss, Home of Professional Open Source   * Copyright 2005, JBoss Inc., and individual contributors as indicated   * by the @authors tag. See the copyright.txt in the distribution for a   * full listing of individual contributors.   *   * This is free software; you can redistribute it and/or modify it   * under the terms of the GNU Lesser General Public License as   * published by the Free Software Foundation; either version 2.1 of   * the License, or (at your option) any later version.   *   * This software is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   * Lesser General Public License for more details.   *   * You should have received a copy of the GNU Lesser General Public   * License along with this software; if not, write to the Free   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.   */ public class Main{   /**    * Make a URL from the given string.    *    * <p>    * If the string is a properly formatted file URL, then the file    * portion will be made canonical.    *    * <p>    * If the string is an invalid URL then it will be converted into a    * file URL.    *    * @param urlspec           The string to construct a URL for.    * @param relativePrefix    The string to prepend to relative file    *                          paths, or null to disable prepending.    * @return                  A URL for the given string.    *    * @throws MalformedURLException  Could not make a URL for the given string.    */   public static URL toURL(String urlspec, final String relativePrefix) throws MalformedURLException   {      urlspec = urlspec.trim();      URL url;      try      {         url = new URL(urlspec);         if (url.getProtocol().equals("file"))         {            url = makeURLFromFilespec(url.getFile(), relativePrefix);         }      }      catch (Exception e)      {         // make sure we have a absolute & canonical file url         try         {            url = makeURLFromFilespec(urlspec, relativePrefix);         }         catch (IOException n)         {            //            // jason: or should we rethrow e?            //            throw new MalformedURLException(n.toString());         }      }      return url;   }   public static URI toURI(String urispec, final String relativePrefix)      throws URISyntaxException   {      urispec = urispec.trim();      URI uri;      if( urispec.startsWith("file:") )      {         uri = makeURIFromFilespec(urispec.substring(5), relativePrefix);      }      else      {         uri = new URI(urispec);      }      return uri;   }   /** A helper to make a URL from a filespec. */   private static URL makeURLFromFilespec(final String filespec, final String relativePrefix)      throws IOException   {      // make sure the file is absolute & canonical file url      File file = new File(decode(filespec));            // if we have a prefix and the file is not abs then prepend      if (relativePrefix != null && !file.isAbsolute())      {         file = new File(relativePrefix, filespec);      }            // make sure it is canonical (no ../ and such)      file = file.getCanonicalFile();      return file.toURI().toURL();   }      private static String decode(String filespec)   {      try      {         return URLDecoder.decode(filespec, "UTF-8");      }      catch (UnsupportedEncodingException e)      {         throw new RuntimeException("Error decoding filespec: " + filespec, e);      }   }      private static URI makeURIFromFilespec(final String filespec, final String relativePrefix)   {      // make sure the file is absolute & canonical file url      File file = new File(decode(filespec));            // if we have a prefix and the file is not abs then prepend      if (relativePrefix != null && !file.isAbsolute())      {         file = new File(relativePrefix, filespec);      }            return file.toURI();   }   /**    * Make a URL from the given string.    *    * @see #toURL(String,String)    *    * @param urlspec    The string to construct a URL for.    * @return           A URL for the given string.    *    * @throws MalformedURLException  Could not make a URL for the given string.    */   public static URL toURL(final String urlspec) throws MalformedURLException   {      return toURL(urlspec, null);   }   /**    *     * @param urispec    * @return the uri    * @throws URISyntaxException for any error    */   public static URI toURI(final String urispec)      throws URISyntaxException   {      return toURI(urispec, null);   } }