Saltar al contenido

¿Cómo obtener la URL principal en Java?

Solución:

El fragmento de código más corto que puedo pensar es este:

URI uri = new URI("http://www.stackoverflow.com/path/to/something");

URI parent = uri.getPath().endsWith("https://foroayuda.es/") ? uri.resolve("..") : uri.resolve(".");

No conozco la función de biblioteca para hacer esto en un solo paso. Sin embargo, creo que el siguiente fragmento de código (ciertamente engorroso) logra lo que está buscando (y podría resumir esto en su propia función de utilidad):

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

public class URLTest
{
    public static void main( String[] args ) throws MalformedURLException
    {
        // make a test url
        URL url = new URL( "http://stackoverflow.com/questions/10159186/how-to-get-parent-url-in-java" );

        // represent the path portion of the URL as a file
        File file = new File( url.getPath( ) );

        // get the parent of the file
        String parentPath = file.getParent( );

        // construct a new url with the parent path
        URL parentUrl = new URL( url.getProtocol( ), url.getHost( ), url.getPort( ), parentPath );

        System.out.println( "Child: " + url );
        System.out.println( "Parent: " + parentUrl );
    }
}

Aquí hay una solución muy simple que fue el mejor enfoque en mi caso de uso:

private String getParent(String resourcePath) {
    int index = resourcePath.lastIndexOf("https://foroayuda.es/");
    if (index > 0) {
        return resourcePath.substring(0, index);
    }
    return "https://foroayuda.es/";
}

Creé una función simple, me inspiré en el código de File::getParent. En mi código, no hay ningún problema con las barras diagonales inversas en Windows. yo asumo eso resourcePath es parte del recurso de la URL, sin protocolo, dominio ni número de puerto. (p.ej /articles/sport/atricle_nr_1234 )

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *