路径问题
程序员文章站
2022-03-02 22:41:14
...
绝对路径:如:D:\web\file.tex
优点:不论当前在任何文件夹下,使用绝对路径,都可以找到对应文件
缺点:如果当前环境改变,绝对路径可能会失效
相对路径
优点:不论当前是什么操作系统,不论硬盘的结构如何,只要2个文件相对的位置不变,就可以找到对应的文件
缺点:文件位置一旦改变,就找不到了
在web应用当中,由于存在请求转发的情况,会改变当前文件的父目录
例如:
regist.jsp的父目录为:WebRoot
/servlet/RegistServlet转发请求给regist.jsp之后的父目录为:WebRoot/servlet
因此使用绝对路径比相对路径更安全
在web环境中读取资源时,如果写的是相对路径,则在tomcat/bin目录下寻找资源。如果写的是绝对路径,则在tomcat所在的根目录下寻找资源。如果写的是盘符开始的绝对路径,可以正确找到资源,但是一旦改变了发布环境,路径很可能是错的,所以提供以下两种方法,用来获取资源的绝对路径
1.ServletContext读取资源
//这个资源从WebRoot的根路径开始找
ServletContext.getRealPath("/WEB-INF/classes/config.xml");
2.类加载器读取资源
如果当前程序中没有ServletContext可以用,此时可以拜托类加载器帮我们加载资源:
类加载器可以加载.class文件,同样也可以加载其他类型的资源文件
在ClassLoader上提供了getResource("相对于类加载目录的路径")可以加载资源,但是要求这个路径给一个相对于类加载器加载类的目录的路径(WEB-INF/classes)。
// ClassLoader->类加载器 还可以加载资源
ClassLoader loader=ServletContextDemo3.class.getClassLoader();
// getResource可以通过给定的名字获取一个资源(图片,音频,文本等)
// getResource方法会直接去classpath下寻找资源
// classpath对于java应用是 bin目录
// classpath对于web应用 WEB-INF/classes
String path=loader.getResource("config.xml").getPath();
System.out.println("path="+path);
推荐阅读
-
php smarty truncate UTF8乱码问题解决办法
-
.Net与JS时间日期格式的转换问题对比分析
-
Ubuntu下MySQL中文乱码的问题解决
-
.Net获取URL中文参数值的乱码问题解决方法总结
-
基于Android SDK-在64位Linux中使用需要注意的问题
-
解决电脑光驱出仓时里面有响声但托盘伸不出来的问题
-
深入Android线程的相关问题解惑
-
Android开发笔记之:深入理解Cursor相关的性能问题
-
深入android中The connection to adb is down的问题以及解决方法
-
Android编程中TextView宽度过大导致Drawable无法居中问题解决方法