一般在編程中,文件路徑分為相對路徑和絕對路徑,絕對路徑比較好處理,但是不靈活。因此我們在編程中對文件進(jìn)行操作的時候,一般讀取文件的相對路徑。
相對路徑——主要是相對于誰?
可以是類加載器路徑,或者是當(dāng)前java文件文件下的路徑,在JSP編程中可能是相對于站點的路徑。
序 ClassPath路徑
框架小知識-Spring單元測試(classpath到底在哪里)
src下的文件編譯之后就會放在WEB-INF/class路徑下面。默認(rèn)的路徑就是在這里,注意,若是直接放在WEB-INF目錄下是不會在classpath路徑下的。
若是maven搭建的1項目,Resource也是classpath路徑。
1. 獲取路徑的方法
1.1 相對于classpath路徑
java項目中:%項目%bin/
javaEE項目中(war):%項目%/target/WEB-INF/class/
javaEE項目中(jar):%項目%/target/class/
Class.getResource("");
Class.getResource("/");
Class.getClassLoader().getResource("");
Class.getClassLoader().getResource("/");
當(dāng)前路徑:classpath路徑。
以SpringBoot項目為例
String path = this.getClass().getResource("").getPath();
String path1 = this.getClass().getResource("/").getPath();
String path2 = this.getClass().getClassLoader().getResource("").getPath();
URL path3 = this.getClass().getClassLoader().getResource("/");

有什么用呢?可以將一些導(dǎo)出文件模板放在Resource目錄下,這樣的話,我們可以通過上述方法直接可以讀取到文件模板。
需要注意的是:本質(zhì)上以
classpath路徑為當(dāng)前路徑,若是資源文件不存在,那么調(diào)用getPath()方法出現(xiàn)空指針異常。
1.2 相對于web路徑
request.getServletContext().getResource("");
request.getServletContext().getResource("/");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
URL url = getServletContext().getResource("");
System.out.println("路徑:"+url); //項目根目錄下
url = getServletContext().getResource("/");
System.out.println("路徑/:"+url); //項目根目錄下
}
在JavaEE環(huán)境(war包)中,這個路徑就是tomcat目錄下的webapps的項目根路徑。也就是取得站點的位置。
我們可以通過使用getServletContext().getContext(
"/")和request.getRealPath("/")取得站點的絕對路徑;而getContextpath()取得是站點的相對路徑【/項目名】。