java 路径的问题
在项目开发中会碰到各种各样的获取项目路径的一些问题:
1:java项目:
以获取 类路径下的mess.properties 为例来说明;
文件在项目中的位置:
src/bz/beppe/demo/resource/mess.properties
1) 通过新建File文件获取其文件所在的路径:
File f=new File("bin/resource/mess.properties"); InputStream in=new FileInputStream(f);
这里获取到的路径地址是:
D:\DMCworkspace\JavaSE\bin\resource\mess.properties
bin/ 下的地址表示获取项目编译后在bin目录下面的路径
2)通过 "." 的方式获取项目的当前所在的路径:
File f3=new File("."); System.out.println(f3.getCanonicalPath());
这里获取到的路径是:
D:\DMCworkspace\JavaSE 即项目所在的路径
3)通过类加载器的方式获取:查找指定资源的url 这里指定资源需要以‘/’开头
URL resource = this.getClass().getResource("/resource/mess.properties"); System.out.println(resource.getFile());
这里获取到的路径是:/D:/DMCworkspace/JavaSE/bin/resource/mess.properties
这里的路径不是以盘符开始的,/D:/DMCworkspace/JavaSE 指定的是java project所在位置,和相应的盘符没有关系;
2:javaweb项目中的获取当前应用的路径:
根目录所对应的绝对路径:request.getServletPath();
文件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI())
当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
3:有一种很特殊的情况,就是获取jar中的文件的路径:
当一个项目你用 new File("xxx")的方式获取文件的路径是没问题的,而当你将该项目打成jar包后放入其他项目中则会报错:FileNotFound 的错误
这是因为这种方式获取到路劲是与盘符和项目所在的目录紧密相关的,在jar包是一个文件没有其中没有java 项目的目录概念,所以获取到的是错误的路劲;
这时候如果要获取jar中的路径则可以通过类加载器的方式来获取其中的路径从而加载文件;
这里以读取jar包中的mess.properties文件为例;
InputStream is = this.getClass().getResourceAsStream("/mess.properties");