java,如何将相对路径转化为绝对路径

dongle2001 2008-05-15 03:26:58
这里说的相对路径是网络上的链接路径。
我现在的解决方法是

//相对路径转绝对路径
private String makeAbsoluteURL(URL strWeb, String innerURL) {
// TODO Auto-generated method stub
if (innerURL != null
&& innerURL.toLowerCase().startsWith("http://")) {
return innerURL;
}

URL linkUri = null;
try {
linkUri = new URL(strWeb, innerURL);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
return linkUri.toString();
}

但是这种方法无法处理下面的情况
比如,
strWeb = "http://456.e.now.cn/";
innerURL = "../share/style.css";

java有没有直接可以用的处理方法,不想自己写函数实现,很麻烦,也容易出错。
...全文
1891 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
hills 2012-03-26
  • 打赏
  • 举报
回复
楼上的情况,我也碰到的,写个regx,将“../”替换成“/”就可以了,如果../有好几层,替换的结果可能为:http://www.xxx.com/aaa/////1.htm,但底层的httpclient会容错的,即解析成:http://www.xxx.com/aaa/1.htm,这样就没问题了
cy88176608 2009-03-18
  • 打赏
  • 举报
回复
一个URL1路径比如 c:/test/folder1/floder2/floder3/aaa.htm 以及相对于URL1的根目录路径URL2为../../floder/bbb.htm(其中../的数目不定,可能是一个,两个或没有),我现在要得到后面这条路径的绝对路径,Java有没有提供相应的函数?或有什么好方法?比如../../floder/bbb.htm转化后为c:/test/folder1/floder/bbb.htm
cy88176608 2009-03-18
  • 打赏
  • 举报
回复
一个URL1路径比如 c:/test/folder1/floder2/floder3/aaa.htm 以及相对于URL1的根目录路径URL2为../../floder/bbb.htm(其中../的数目不定,可能是一个,两个或没有),我现在要得到后面这条路径的绝对路径,Java有没有提供相应的函数?或有什么好方法?比如../../floder/bbb.htm转化后为c:/test/folder1/floder/bbb.htm
cy88176608 2009-03-18
  • 打赏
  • 举报
回复
相当的期待,遇到同样问题~! 想用正则表达式提取后,replaceall但是灵活性太差
duzhonghua 2008-05-19
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 niko7 的回复:]
引用 17 楼 dongle2001 的回复:
引用 16 楼 jiangnaisong 的回复:
问:这样为什么不行?
答:基本页面URL:http://456.e.now.cn/
相对于上述基本页面的URL:../share/style.css这个相对URL是不正确的故当然不行。错误原因是:../share/style.css 这个红色的..表示相对于基本页面的父亲(而:这个基本页面的父亲是不存在的),而若:基本页面URL是:http://456.e.now.cn/test/,则这个页面的父亲是存在的。故我12楼的才…
[/Quote]

学习下.......
shili150 2008-05-19
  • 打赏
  • 举报
回复
henhao
dongle2001 2008-05-19
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 niko7 的回复:]
引用 17 楼 dongle2001 的回复:
引用 16 楼 jiangnaisong 的回复:
问:这样为什么不行?
答:基本页面URL:http://456.e.now.cn/
相对于上述基本页面的URL:../share/style.css这个相对URL是不正确的故当然不行。错误原因是:../share/style.css 这个红色的..表示相对于基本页面的父亲(而:这个基本页面的父亲是不存在的),而若:基本页面URL是:http://456.e.now.cn/test/,则这个页面的父亲是存在的。故我12楼的才有运…
[/Quote]
base我注意到了。浏览器的容错处理,它都有什么样的规则。
niko7 2008-05-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dongle2001 的回复:]
引用 16 楼 jiangnaisong 的回复:
问:这样为什么不行?
答:基本页面URL:http://456.e.now.cn/
相对于上述基本页面的URL:../share/style.css这个相对URL是不正确的故当然不行。错误原因是:../share/style.css 这个红色的..表示相对于基本页面的父亲(而:这个基本页面的父亲是不存在的),而若:基本页面URL是:http://456.e.now.cn/test/,则这个页面的父亲是存在的。故我12楼的才有运行结果。

按道理是这样的。

[/Quote]
应该是你的浏览器进行容错处理。
做爬虫的话,上面的处理可能还不够吧,因为html有个属性 base ,楼主是不是也要注意这个设置呢?
lisl2003 2008-05-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 7761098 的回复:]
学到
[/Quote]
dongle2001 2008-05-18
  • 打赏
  • 举报
回复
up
dongle2001 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jiangnaisong 的回复:]
问:这样为什么不行?
答:基本页面URL:http://456.e.now.cn/
相对于上述基本页面的URL:../share/style.css这个相对URL是不正确的故当然不行。错误原因是:../share/style.css 这个红色的..表示相对于基本页面的父亲(而:这个基本页面的父亲是不存在的),而若:基本页面URL是:http://456.e.now.cn/test/,则这个页面的父亲是存在的。故我12楼的才有运行结果。
[/Quote]
按道理是这样的。
但是那个网页上就是这么用的,而且还能正确显示。
dongle2001 2008-05-16
  • 打赏
  • 举报
回复
这样为什么不行?

URI base=new URI("http://456.e.now.cn/");//基本网页URI
URI abs=base.resolve("../share/style.css");//解析于上述网页的相对URL,得到绝对URI
URL absURL=abs.toURL();//转成URL
System.out.println(absURL);
dongle2001 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jiangnaisong 的回复:]
引用 11 楼 dongle2001 的回复:
对,就是这个意思。谁写过转换的函数,贴出来共享一下。

答:查询了API,有现成的标准的API可做。楼主用URI类就可完成该功能。
转换代码如下:
Java codeURI base=newURI("http://456.e.now.cn/test/");//基本网页URIURI abs=base.resolve("../share/style.css");//解析于上述网页的相对URL,得到绝对URIURL absURL=abs.toURL();//转成URLSystem.out.println(absURL);
运行结果:http://45…
[/Quote]
多谢
云上飞翔 2008-05-16
  • 打赏
  • 举报
回复
问:这样为什么不行?
答:基本页面URL:http://456.e.now.cn/
 相对于上述基本页面的URL:../share/style.css 这个相对URL是不正确的故当然不行。错误原因是:../share/style.css 这个红色的..表示相对于基本页面的父亲(而:这个基本页面的父亲是不存在的),而若:基本页面URL是:http://456.e.now.cn/test/,则这个页面的父亲是存在的。故我12楼的才有运行结果。
ThirdDimension 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jiangnaisong 的回复:]
引用 11 楼 dongle2001 的回复:
Java code
URI base=new URI("http://456.e.now.cn/test/");//基本网页URI
URI abs=base.resolve("../share/style.css");//解析于上述网页的相对URL,得到绝对URI
URL absURL=abs.toURL();//转成URL
System.out.println(absURL);



[/Quote]

云上飞翔 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dongle2001 的回复:]
对,就是这个意思。谁写过转换的函数,贴出来共享一下。
[/Quote]
答:查询了API,有现成的标准的API可做。楼主用URI类就可完成该功能。
转换代码如下:

URI base=new URI("http://456.e.now.cn/test/");//基本网页URI
URI abs=base.resolve("../share/style.css");//解析于上述网页的相对URL,得到绝对URI
URL absURL=abs.toURL();//转成URL
System.out.println(absURL);

运行结果:http://456.e.now.cn/share/style.css
dongle2001 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jiangnaisong 的回复:]
引用 8 楼 zuoguodang 的回复:
就用URL url = getClass().getResource("images/splash.gif");绝对对的

答:这个与楼主的问题是两回事啊。楼主要的是:
若:(见楼主贴子)比如,
strWeb = "http://456.e.now.cn/";
innerURL ="../share/style.css";
请问:你这个方法能把楼主的相对innerURL转变成绝对:http://456.e.now.cn/share/style.css吗?
如在:WEB网页爬虫程序中,其获取的网页地址是:strWeb = "http://456.e…
[/Quote]
对,就是这个意思。谁写过转换的函数,贴出来共享一下。
云上飞翔 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zuoguodang 的回复:]
就用URL url = getClass().getResource("images/splash.gif");绝对对的
[/Quote]
答:这个与楼主的问题是两回事啊。楼主要的是:
若:(见楼主贴子)比如,
strWeb = "http://456.e.now.cn/";
innerURL = "../share/style.css";
请问:你这个方法能把楼主的相对innerURL转变成绝对:http://456.e.now.cn/share/style.css吗?
如在:WEB网页爬虫程序中,其获取的网页地址是:strWeb = "http://456.e.now.cn/";
而:innerURL = "../share/style.css"; 是该网页中抓出来的相对URL,你这个方法能变成:上边的绝对URL吗?
一句话:我想恐怕要楼主自己写了。


7761098 2008-05-15
  • 打赏
  • 举报
回复
学到
zuoguodang 2008-05-15
  • 打赏
  • 举报
回复
就用URL url = getClass().getResource("images/splash.gif");绝对对的
加载更多回复(7)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧