Вопрос по java – Как получить родительский URL в Java?

11

В Objective-C я использую-[NSURL URLByDeletingLastPathComponent] получить родительский URL. Что эквивалентно этому в Java?

Ваш Ответ

3   ответа
26

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

URI parent = uri.getPath().endsWith("/") ? uri.resolve("..") : uri.resolve(".")
Похоже, это не работает для URI с протоколом «jar: file: ...», который используется с ресурсами, расположенными в файлах JAR.
URI.resolve также отлично подходит для более сложных операций ... таких как uri.resolve (& quot; dir / file.txt & quot;)
1

которое было лучшим подходом в моем случае использования:

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

Я создал простую функцию, я был вдохновлен кодомFile::getParent, В моем коде нет проблем с косой чертой в Windows. Я предполагаю чтоresourcePath является ресурсной частью URL, без протокола, домена и номера порта. (например./articles/sport/atricle_nr_1234 )

4

чтобы сделать это за один шаг. Тем не менее, следующий (заведомо громоздкий) фрагмент кода, на мой взгляд, выполняет то, что вам нужно (и вы можете заключить это в свою собственную служебную функцию):

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 );
    }
}
В Windows это приводит к появлению обратной косой черты.

Похожие вопросы