Java URI Create createURI(final String file)

Here you can find the source of createURI(final String file)

Description

Crea una URI a partir de un nombre de fichero local o una URL.

License

Open Source License

Parameter

Parameter Description
file Nombre del fichero local o URL

Exception

Parameter Description
URISyntaxException Si no se puede crear una URI soportada a partir de la cadena de entrada

Return

URI (<code>file://</code>) del fichero local o URL

Declaration

public static URI createURI(final String file) throws URISyntaxException 

Method Source Code

//package com.java2s;
/* Copyright (C) 2011 [Gobierno de Espana]
 * This file is part of "Cliente @Firma".
 * "Cliente @Firma" is free software; you can redistribute it and/or modify it under the terms of:
 *   - the GNU General Public License as published by the Free Software Foundation;
 *     either version 2 of the License, or (at your option) any later version.
 *   - or The European Software License; either version 1.1 or (at your option) any later version.
 * Date: 11/01/11/* w  w  w  . j av  a 2s  .co m*/
 * You may contact the copyright holder at: soporte.afirma5@mpt.es
 */

import java.net.URI;
import java.net.URISyntaxException;

public class Main {
    private static final String[] SUPPORTED_URI_SCHEMES = new String[] { "http", "https", "file", "urn" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    };

    /** Crea una URI a partir de un nombre de fichero local o una URL.
     * @param file Nombre del fichero local o URL
     * @return URI (<code>file://</code>) del fichero local o URL
     * @throws URISyntaxException Si no se puede crear una URI soportada a partir de la cadena de entrada */
    public static URI createURI(final String file) throws URISyntaxException {

        if (file == null || file.isEmpty()) {
            throw new IllegalArgumentException("No se puede crear una URI a partir de un nulo"); //$NON-NLS-1$
        }

        String filename = file.trim();

        if ("".equals(filename)) { //$NON-NLS-1$
            throw new IllegalArgumentException("La URI no puede ser una cadena vacia"); //$NON-NLS-1$
        }

        // Cambiamos los caracteres Windows
        filename = filename.replace('\\', '/');

        // Realizamos los cambios necesarios para proteger los caracteres no
        // seguros
        // de la URL
        filename = filename.replace(" ", "%20") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("<", "%3C") //$NON-NLS-1$ //$NON-NLS-2$
                .replace(">", "%3E") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("\"", "%22") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("{", "%7B") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("}", "%7D") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("|", "%7C") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("^", "%5E") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("[", "%5B") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("]", "%5D") //$NON-NLS-1$ //$NON-NLS-2$
                .replace("`", "%60"); //$NON-NLS-1$ //$NON-NLS-2$

        final URI uri = new URI(filename);

        // Comprobamos si es un esquema soportado
        final String scheme = uri.getScheme();
        for (final String element : SUPPORTED_URI_SCHEMES) {
            if (element.equals(scheme)) {
                return uri;
            }
        }

        // Si el esquema es nulo, aun puede ser un nombre de fichero valido
        // El caracter '#' debe protegerse en rutas locales
        if (scheme == null) {
            filename = filename.replace("#", "%23"); //$NON-NLS-1$ //$NON-NLS-2$
            return createURI("file://" + filename); //$NON-NLS-1$
        }

        // Miramos si el esquema es una letra, en cuyo caso seguro que es una
        // unidad de Windows ("C:", "D:", etc.), y le anado el file://
        // El caracter '#' debe protegerse en rutas locales
        if (scheme.length() == 1 && Character.isLetter((char) scheme.getBytes()[0])) {
            filename = filename.replace("#", "%23"); //$NON-NLS-1$ //$NON-NLS-2$
            return createURI("file://" + filename); //$NON-NLS-1$
        }

        throw new URISyntaxException(filename, "Tipo de URI no soportado"); //$NON-NLS-1$

    }
}

Related

  1. createDatastream(String registrationUri, String APIKey, String xmlDescription)
  2. createDefaultName(final String uri)
  3. createExtensionUri(final String ext)
  4. createURI()
  5. createUri(File file)
  6. createUri(final String path)
  7. createUri(final String path, final String query)
  8. createURI(final String scheme, final String host, final int port)
  9. createURI(final String scheme, final String host, int port, final String path, final String query, final String fragment)