这里说的相对路径是网络上的链接路径。
我现在的解决方法是//相对路径转绝对路径
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有没有直接可以用的处理方法,不想自己写函数实现,很麻烦,也容易出错。

解决方案 »

  1.   

    String   strRealPath   =   getServletContext().getRealPath(String   strVirtualPath);  
      

  2.   

    4楼正解,web开发时基本都是这样写啊
      

  3.   

    就用URL url = getClass().getResource("images/splash.gif");绝对对的
      

  4.   

    答:这个与楼主的问题是两回事啊。楼主要的是:
    若:(见楼主贴子)比如, 
    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吗?
    一句话:我想恐怕要楼主自己写了。
      

  5.   

    答:查询了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
      

  6.   

    这样为什么不行?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);
      

  7.   

    问:这样为什么不行? 
    答:基本页面URL:http://456.e.now.cn/
     相对于上述基本页面的URL:../share/style.css 这个相对URL是不正确的故当然不行。错误原因是:../share/style.css 这个红色的..表示相对于基本页面的父亲(而:这个基本页面的父亲是不存在的),而若:基本页面URL是:http://456.e.now.cn/test/,则这个页面的父亲是存在的。故我12楼的才有运行结果。
      

  8.   

    应该是你的浏览器进行容错处理。
    做爬虫的话,上面的处理可能还不够吧,因为html有个属性 base ,楼主是不是也要注意这个设置呢?
      

  9.   

    base我注意到了。浏览器的容错处理,它都有什么样的规则。
      

  10.   

    相当的期待,遇到同样问题~! 想用正则表达式提取后,replaceall但是灵活性太差
      

  11.   

    一个URL1路径比如 c:/test/folder1/floder2/floder3/aaa.htm 以及相对于URL1的根目录路径URL2为../../floder/bbb.htm(其中../的数目不定,可能是一个,两个或没有),我现在要得到后面这条路径的绝对路径,Java有没有提供相应的函数?或有什么好方法?比如../../floder/bbb.htm转化后为c:/test/folder1/floder/bbb.htm 
      

  12.   

    一个URL1路径比如 c:/test/folder1/floder2/floder3/aaa.htm 以及相对于URL1的根目录路径URL2为../../floder/bbb.htm(其中../的数目不定,可能是一个,两个或没有),我现在要得到后面这条路径的绝对路径,Java有没有提供相应的函数?或有什么好方法?比如../../floder/bbb.htm转化后为c:/test/folder1/floder/bbb.htm 
      

  13.   

    楼上的情况,我也碰到的,写个regx,将“../”替换成“/”就可以了,如果../有好几层,替换的结果可能为:http://www.xxx.com/aaa/////1.htm,但底层的httpclient会容错的,即解析成:http://www.xxx.com/aaa/1.htm,这样就没问题了