在java中,resources文件夹下的文件在编译后,都是为根目录(classpath)

结论

resources文件夹下的文件在编译后,都是为根目录

getClass().getResource("/") 
== getClass().getClassLoader().getResource("")
== getClass().getClassLoader().getResource("/")
== servletContext.getResourceAsStream("/WEB-INF/classes/")
	[↑ javax.Servlet Web项目]
== 硬盘上 classes 文档的全路径
如:file:/H:/MyProgramFriles/tomcat/apache-tomcat-8.5.50/webapps/aa/WEB-INF/classes/

同:spring中的classpath

另外:

关于webapps的(全物理)目录:https://blog.csdn.net/LawssssCat/article/details/103626425(写 在 下 面 \color{#F91}{写在下面}写在下面)
关于webapps的(动态路径): https://blog.csdn.net/LawssssCat/article/details/103534942
${pageContext.request.contextPath } ⇒ 工程名/

public class LoginFilter extends HttpFilter implements Filter {
    @Override
    protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain)
    throws IOException, ServletException {
    	String URL = req.getRequestURL().toString();
    	String uri = req.getRequestURI();
    	String contextPath = req.getContextPath();
    	System.out.println(URL);
    	System.out.println(uri);
    	System.out.println(contextPath);
   	    }
}

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

测试

路径问题一切要看编译后的文件路径

比如,源文件路径是:
在这里插入图片描述

而编译后的文件路径为:

在这里插入图片描述

也就是说,resources文件夹下的文件在编译后,都是为根目录,这种情况下,比如我要读取resources 文件夹下的 my.txt 文件路径。

写法①:

// 编译后,项目根路径,写法1

String url1 = A.class.getClassLoader().getResource("").toString();

// 编译后,项目根路径,写法2

String url2 = A.class.getResource("/").toString();

// 编译后,文件根路径

String url3 = A.class.getResource("").toString();

输出:

file:/D:/IdeaWorkspace/test-null-project/target/classes/
file:/D:/IdeaWorkspace/test-null-project/target/classes/
file:/D:/IdeaWorkspace/test-null-project/target/classes/com/convict/

扩展:

写法②getFile 跟写法③getPath 是有区别的,getResource 方法后返回的是一个 java.net.URL对象,那手动构造一个java.net.URL

URL url = new URL("https://www.baidu.com/img/baidu_jgylogo3.gif?param=1111&param2=aaaaa");
System.out.println("getFile ==> " + url.getFile());
System.out.println("getPath ==> " + url.getPath());

输出:

getFile ==> /img/baidu_jgylogo3.gif?param=1111&param2=aaaaa
getPath ==> /img/baidu_jgylogo3.gif

可以看出,getFile() 方法可以拿到参数值,而getPath() 就是只取文件名,JDK中文文档相关api如下:
在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值