java project中如何获得相对路径(编译后的目录是在/bin目录下)(一般图片 这些目录放在 项目目录下,与src同级)
在static方法中,用
String path = Test.class.getResource("").getPath();
在非static方法中,用
String path = this.getClass().getResource("").getPath();
或
String path = Test.class.getResource("").getPath();
都行!!
(因为在static方法中没有this关键字)
打印出来的结果如:
(以上获取到的 是该类 所在的相对路径)
====>>>可以使用 Runtime.getRuntime().exec("p.exe"); 调用另一个现成的可执行程序或系统命令
Classpath 类路径 ========》》可以理解为项目编译后所在的路径,其实就是项目的路径
最准确讲,应该是Source Folder的路径(比如src目录)
用UploadImage.class.getResource("/") 可以获取类路径classpath
注意:使用getResource的相对路径一定要以“/”开头,
输出:
另外,还要注意:如果java路径中含空格的话,这种方式获取的路径,其中的空格会被使用“%20”代替,
所以还需要使用String configPath=this.getClass().getResource("/").toString().replaceAll("%20", " ");进行解决!!!
总的来说,就是一下两种:
1、其实在 web 项目中,你也可以直接写成像这样的字符串“images/1.jpg”,,它也是会按相对路径来解析的,不过:
路径不以“/”开头;
脱离了IDE环境,这个写法就是错误的,也并非每个IDE都如此,但我见到的都是这样的。
(默认是该项目下,而非src下)
2、不同的是,使用getResource的相对路径一定要以“/”开头
【使用工程相对路径是靠不住的。 使用CLASSPATH路径是可靠的。
对于程序要读取的文件,尽可能放到CLASSPATH下,这样就能保证在开发和发布时候均正常读取。】
通过CLASSPATH读取包内文件::::
读取包内文件,使用的路径一定是相对的classpath路径,比如a,位于包内,此时可以创建读取a的字节流:
InputStream in = ReadFile.class.getResourceAsStream("/com/lavasoft/res/a.txt");
java web project中如何获得相对路径(编译后的目录是在/lib/classes目录下)
(一般图片这些目录 都放在 webRoot或webContent目录下)
直接写成“images/1.jpg”,就可以按 相对路径去解析了,默认是在 webRoot或webContent目录下
这样就可以显示图片了
但是不能在路径前面加上“/”,比如
这样是不行的。。
其实这些相对路径,都是按编译后的文件 的目录情况去找资源文件的,所以对编译后的文件的目录要清晰才行。
比如testtt的web项目,目录为:
编译后的目录为:
1、
很少用::(更多的是直接用 “images/1.jpg”的形式)
<%=request.getContextPath()%> 取得项目 所在的相对路径
输出:
2、
取得绝对路径:
使用HttpServletRequest 对象的getRealPath()方法
String path = request.getRealPath("");
输出:
(如果在加上“/”)
输出:
以上三个的结果都是一样的:
(ServletContext对象获得几种方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)
3、
在配置文件中配置所需要的路径
注意:
java project项目获取到的路径是该目录所在的路径
而java web project项目中获取到的路径是部署到服务器(如tomcat上)的路径