JavaWeb及Java读取文件路径总结

1、File读取方式

1.1、硬盘绝对路径

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    String path = "E:\path\1.txt";
    File file = new File(path);
    System.out.println(file.getAbsolutePath());//输出读取到的文件路径
}

1.2、相对路径


显然读取路径出现问题了

原理:Java文件读取的机制了:如果你直接这样写路径new File(" a.txt");那么tomcat就会从程序启动的地方去找这个文件(Java项目中也是如此)

web应用是从有tomcat来执行,而tomcat由tomcat/bin/startup.bat启动的

2、ServletContext().getRealPath

[ 只能在Servlet中,或是Servlet的上层类中使用, 比如SpringMVC,Controller ]

对于ServletContext().getRealPath(“路径名A”);这个方法,无论你的路径名A是什么,ServletContext().getRealPath()方法底层都会在路径名A前拼上当前web应用的硬盘路径

只要你的文件在web应用的中的相对路径不变,那么不论你的web应用如何更换服务器环境,都能动态的获取当前服务器环境的绝对文件路径。

3.ClassLoader类的getResource()

[ Java都能用,但是必须知道类加载器的路径 ]

类加载器是从你的web应用的WEB-INFclass文件夹下找.class文件来加载的。所以呢,你要找的web应用中的文件只要相对于你的class文件夹找就可以了。

其实类加载器也是搞出来一个绝对硬盘路径来找文件的,只是这个绝对路径是随着web应用的路径变化而变化的,就不存在web应用换了服务器环境找不到资源的问题了。

4.Target与webapp目录

webapp目录是访问的目录,target目录有时候需要重新编译才会将resource的内容更新。classpath获取到的是target的目录。

转载:

https://blog.csdn.net/qq_20597149/article/details/79872579

原文地址:https://www.cnblogs.com/biturd/p/12623162.html