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 );
}
}
7条答案
按热度按时间jm81lzqq1#
我能想到的最短的代码片段如下:
ukqbszuj2#
我不知道有哪个库函数可以一步完成这个任务,但是,我相信下面这段代码(确实很麻烦)可以完成你所追求的目标(你可以把它 Package 在你自己的实用函数中):
ac1kyiln3#
下面是一个非常简单的解决方案,在我的使用案例中是最好的方法:
我创建了一个简单的函数,我的灵感来自于
File::getParent
的代码。在我的代码中,在Windows上没有反斜杠的问题。我假设resourcePath
是URL的资源部分,没有协议,域和端口号。(例如/articles/sport/atricle_nr_1234
)ee7vknir4#
Guava库提供的简单解决方案。
代码:
输出:
供参考:https://guava.dev/releases/snapshot/api/docs/com/google/common/net/InternetDomainName.html
所需依赖关系:
https://mvnrepository.com/artifact/com.google.guava/guava
我使用的是19.0版本
此外,此类InternetDomainName还提供了更多相关功能。
cngwdvgl5#
更简洁的方式
就是这样
wr98u20j6#
使用java.nio.file.paths,这可以在一行中完成。
例如:
将打印:
请记住https:/缺少一个斜杠,因此您可以将其添加到另一个替换中:
将打印:
sqyvllje7#
如果您有
javax.ws.rs.core.UriBuilder
: