首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否从Java URL (文件:和http/https协议)提取文件名?

是否从Java URL (文件:和http/https协议)提取文件名?
EN

Stack Overflow用户
提问于 2021-11-17 19:27:15
回答 1查看 30关注 0票数 2

我有各种各样的urls,如下所示:

代码语言:javascript
复制
String a = "file:./bla/file.txt"; // Valid, see See [RFC 3986][1], path - rootless definition
String b = "file:.file.txt";      // Valid, see See [RFC 3986][1], path - rootless definition
String c = "file:./file.txt";     // Valid, see See [RFC 3986][1], path - rootless definition
String d = "file:///file.txt";
String e = "file:///folder/file.txt";
String f = "http://example.com/file.txt";
String g = "https://example.com/file.txt";

这些都是有效的URL,我可以将它们转换为java中的URL,而不会出现错误:

代码语言:javascript
复制
URL url = new URL(...);

我想从上面的每个示例中提取文件名,所以只剩下:

代码语言:javascript
复制
file.txt

我已经尝试了以下方法,但对于上面的示例b (这是一个有效的URL)不起作用:

代码语言:javascript
复制
b.substring(path.lastIndexOf('/') + 1); // Returns file:.file.txt

我可以尝试编写一些自定义代码来检查斜杠,只是想知道是否有更好、更健壮的方法来做这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 22:45:10

URI类正确地解析URI的各个部分。对于大多数URI,您需要URI的路径(https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/URI.html#getPath(%29)。对于没有斜杠的URI,将不会对各个部分进行任何解析,因此您必须依赖于整个特定于方案的部分(https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/URI.html#getSchemeSpecificPart(%29)

代码语言:javascript
复制
URI uri = new URI(b);
String path = uri.getPath();
if (path == null) {
    path = uri.getSchemeSpecificPart();
}
String filename = path.substring(path.lastIndexOf('/') + 1);

上面的方法应该适用于你所有的URL。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70010414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档