How to get parent URL in Java?

前端 未结 4 1123
眼角桃花
眼角桃花 2020-12-11 15:51

In Objective-C I use -[NSURL URLByDeletingLastPathComponent] to get parent URL. What\'s the equivalent of this in Java?

相关标签:
4条回答
  • 2020-12-11 16:21

    Here is very simple solution which was the best approach in my use case:

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

    I created simple function, I was inspired by the code of File::getParent. In my code there is no issue with back slashes on Windows. I assume that resourcePath is resource part of URL, without protocol, domain and port number. (e.g. /articles/sport/atricle_nr_1234 )

    0 讨论(0)
  • 2020-12-11 16:23

    The simple solution offered by Guava library.

    Code:

    URL url = new URL("https://www.ibm.watson.co.uk");
    String host = url.getHost();
    
    InternetDomainName parent = InternetDomainName.from(host).parent(); // returns ibm.watson.co.uk
    System.out.println("Immediate ancestor: "+parent);
    
    
    ImmutableList<String> parts = InternetDomainName.from(host).parts(); 
    System.out.println("Individual components:  "+parts);
    
    
    InternetDomainName name = InternetDomainName.from(host).topPrivateDomain(); // watson.co.uk
    System.out.println("Top private domain - " + name);
    

    Output:

    Immediate ancestor: ibm.watson.co.uk
    
    Individual components:  [www, ibm, watson, co, uk]
    
    Top private domain - watson.co.uk
    

    For reference: https://guava.dev/releases/snapshot/api/docs/com/google/common/net/InternetDomainName.html

    Dependency required:

    https://mvnrepository.com/artifact/com.google.guava/guava

    I'm using version 19.0

    <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
    </dependency>
    

    And, many more related functionalities are provided by this class InternetDomainName.

    0 讨论(0)
  • 2020-12-11 16:30

    Shortest snippet of code I can think of is this:

    URI uri = new URI("http://www.stackoverflow.com/path/to/something");
    
    URI parent = uri.getPath().endsWith("/") ? uri.resolve("..") : uri.resolve(".");
    
    0 讨论(0)
  • 2020-12-11 16:37

    I don't know of library function to do this in one step. However, the following (admittedly cumbersome) bit of code I believe accomplishes what you're after (and you could wrap this up in your own utility function):

    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 );
        }
    }
    
    0 讨论(0)
提交回复
热议问题