前面咱們說過
ServletContext
表示的是web容器中的上下文,下面咱們也是用到ServletContext
中的方法讀取文件java
咱們知道當咱們將項目部署到
Tomcat
服務器中時,項目中的文件路徑其實就是在Tomcat中的文件路徑,全部的項目都是存儲在webapps下的,咱們能夠看到webaapps下有兩個文件夾(WEB-INF,META-INF)
,這兩個其實就是項目中webRoot
下的兩個文件夾。web
public String getRealPath(String path)
爲給定虛擬路徑返回包含實際路徑的String
//獲取ServletContext的對象 ServletContext context = this.getServletContext(); //context.getRealPath("/")獲取項目的根目錄的絕對路徑(webRoot的絕對路徑) //獲得了webRoot的絕對路徑,下面只要再接着寫其餘文件的路徑便可 File file = new File(context.getRealPath("/") + "\\WEB-INF\\lib\\file.txt"); if (file.exists()) { System.out.println("文件存在"); } else { System.out.println("文件不存在,如今咱們建立一個"); try { file.createNewFile();// 建立一個新的文件 } catch (IOException e) { e.printStackTrace(); } }
InputStream getResourceAsStream(String path)
根據傳入的路徑文件,返回一個InputStream
對象
// 第一個"/"是表示webRoot的根目錄,經過這個函數能夠不用指定絕對路徑就能夠構造一個輸入字節流 InputStream stream = context .getResourceAsStream("/WEB-INF/lib/file.txt"); // 經過InputStreamReader將字節流轉換爲字符流,而後建立緩衝字符流讀取文件 BufferedReader reader = new BufferedReader( new InputStreamReader(stream)); try { System.out.println(reader.readLine()); } catch (IOException e) { System.out.println("文件沒有成功讀取"); e.printStackTrace(); }
注意:這個函數中的path傳入的第一個
"/"
就表示根目錄,在eclipse
項目中表示webRoot的絕對路徑,在Tomcat
下的webapps表示項目名稱的絕對路徑,所以在下面的WEB-INF,META-INF文件夾下的文件只須要在後面繼續添加便可服務器
前面咱們獲取的
webRoot
下的文件路徑,可是若是咱們想要獲取src
下的文件,那麼咱們要如何獲取呢。app
咱們仔細看看
Tomcat
下的文件,能夠發如今每個WEB-INF下都有一個classes
,這個就是至關於Tomcat下的src,所以咱們利用上面獲得的路徑稍加修改就能夠輕易的獲得其中的文件路徑eclipse
下面咱們讀取
src
文件夾下的file.txt
中的內容,代碼以下:webapp
// 獲取ServletContext對象 ServletContext context = this.getServletContext(); // 這個是獲取項目下的src文件夾下的file.txt文件 File file = new File(context.getRealPath("/") + "\\WEB-INF\\classes\\file.txt"); BufferedReader reader = null; if (file.exists()) { System.out.println("文件存在,如今能夠讀取"); try { // 建立緩衝流對象,實現讀取文件 reader = new BufferedReader(new FileReader(file)); try { // 輸出第一行內容 System.out.println(reader.readLine()); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { System.out.println("文件不存在"); } finally { if (reader != null) { try { reader.close(); // 若是reader不是空,就關閉 } catch (IOException e) { System.out.println("文件關閉失敗"); } } } } else { System.out.println("文件不存在,如今開始建立一個"); try { file.createNewFile();// 建立一個 } catch (IOException e) { System.out.println("沒有建立成功"); } }