路径的学习

概念了解

在学习之前首先了解大致含义。

虚拟路径:浏览器使用的路径

真实路径:在硬盘中真实存在的路径

绝对路径:以斜线开头的路径

相对路径:不以斜线开头的路径

 

一关于classpath下文件的读取

当我们新建一个简单的java程序,会发现程序下有两个文件夹。一个是bin文件夹,另一个是src文件夹。这两个文件夹的后缀一个是.java,另一个后缀是.class.有意思的是,我们在ide环境下看到文件的后缀是.java,以为我们在操作src文件夹,而实际上我们操作的确实bin文件夹。为了做测试,我们创建出三个xml文件。C.xml位于bin文件夹下面;c1.xml位于src文件夹下面;b.xml和bin文件夹同级,然后使用getResource语句来获取文件信息。

代码如下

son son = new son();

         //获取项目名下的文件

         URL b=son.getClass().getResource("b.xml");

         //获取bin目录下的文件

         URL c=son.getClass().getResource("c.xml");

         //获取src目录下的文件

         URL c1=son.getClass().getResource("c1.xml");

         //打印项目名下的文件

          System.out.println(b);

          //打印bin目录下的文件

          System.out.println(c);

          //打印src目录下的文件

         System.out.println(c1);

结果如下:

null

file:/D:/xuepeirandexiangmu/Test/bin/Testreflection/c.xml

null

仔细看我们的语句,都是使用的相对路径。那我们相对于谁呢?其实就是相对于

D:/xuepeirandexiangmu/Test/bin这个路径。所以不在这个目录下的文件统统找不到。更详细的用法如下:

第一:要加载的文件example.xml和.class文件在同一个目录下

.class.getResourceAsStream(“example.xml”);

第二不和.class同级,在.class文件下一级xml文件夹内即/xml/example.xml

.class.getResourceAsStream(“/xml/example.xml”);

第三不和.c.class同级,在.class文件上一级的别的文件夹内,即test/x.me.class

和test/y.example.xml

.class.getResourceAsStream(“/test/y.example”);

第一:前面有 “/”

“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject

me.class.getResourceAsStream("/com/x/file/myfile.xml");

第二:前面没有 “/”

代表当前类的目录

 关于.class.getresource和.classloader.getresource的不同请参考下面这篇博客

http://swiftlet.net/archives/868


二用户工作目录

经过上面的测试,我们意识到如果b.xml文件和bin文件夹同级的时候,我们读取到b.xml文件。在这种情况下我们可以尝试使用当前工作目录.

String name= System.getProperty("user.dir");

System.out.print(name);

结果如下:

D:\xuepeirandexiangmu\Test

如果想进一步得到b.xml只要在name的基础上加上文件名字就可以了。

但是这样的做法有很严重的弊端。在普通的java项目下,会返回项目所在的路径。但是在web项目中,可能返回的是某个服务器的某个路径。而这个路径并没有统一的规范。也就是这个路径有可能在tomcat中运行没问题,却会在jboss服务器中路径缺失。

三web工作目录

在使用struts,springmvc等框架和编辑前台页面时会碰到。

如果路径是给浏览器用的,这个路径相对于虚拟主机,所以需要写上web应用的名称

如果路径是给服务器用的,这个路径相对于web应用,可以省写web应用名称

  <a href=”/Dayo4/…”>   浏览

  <form action=”/Day04/..”>  浏览

  <img src=”/Day04/..”>  浏览

   Response.setHeader(“location”,””)  浏览

   Response.setHeader(“refresh”,””)   浏览

   Response.sendRedirect(“”)  重定向  浏览器

Response.getRequestDispathce(“/index.jsp”).forward  服务器

Response.getRequestDispathce(”/index.jsp”).include                           .            服务器

四总结

1尽量不要使用相对于System.getProperty(“user.dir”),因为在web项目中它的路径很可能会返回服务器的路径,而这个路径是不统一的。

2尽量使用相对classpath的相对路径。不要使用绝对路径。尤其是使用硬编码的绝对路径,因为程序无法移植。

3jsp里引用的路径可以使用绝对路径。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值