一、java project項目
如果工程項目是java project的話獲取資源文件
1、如果是在本工程根目錄下直接訪問
FileReader fr = new FileReader("config.properties");
2、也可以直接根據實際路徑進行訪問
FileReader fr = new FileReader("D:\\practice\\backend\\myeclipse\\web_db\\config.properties");
3、使用類加載器訪問(所在目錄為src目錄 如果要放到具體的包里面 需要加上包的目錄)這種方式讀取資源文件只能放在src或者是src子目錄
InputStream fr = JDBCUtil.class.getClassLoader().getResourceAsStream("config.properties");
二、web project
Properties pt = new Properties(); pt.load(new FileReader("config.properties"));
如果按照上面的代碼訪問(文件還是在根目錄下)會報如下錯誤
出現上面的錯誤的解決方法(於java project項目不同 資源文件必須能夠發布到服務器上才能夠訪問)
1、用類加載器的方式進行訪問資源(在src目錄下 在包中的話則需要加上包的目錄)這種方式讀取資源文件只能放在src或者是src子目錄
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("config.properties");
如果資源在WebRoot的根目錄下則需要用下面的代碼進行訪問資源
Properties pt = new Properties(); URL ur = JDBCUtil.class.getClassLoader().getResource("../../"); String pathName = ur.toString()+"config.properties"; FileInputStream is = null; try { is = new FileInputStream(pathName.substring(6)); } catch (FileNotFoundException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } try { pt.load(is); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }
2、使用國際化資源類進行訪問資源
ResourceBundle rb=ResourceBundle.getBundle("cn.itcast.jdbc.util.config");
但是如果你要放在項目的根目錄下想通過瀏覽器的方式是訪問不到資源的
因為發布項目的時候發布的是WebRoot目錄里面的東西(根目錄下的資源根本就發布不到工程里所以無法訪問資源) Tomcat編譯后的文件如下圖
假如你想通過這樣的路徑訪問資源文件http://localhost:8080/web_servlet03/WEB-INF/classes/config.properties 也是訪問不到的因為WEB-INF目錄是不能通過
瀏覽器進行訪問的。(雖然不能通過瀏覽器訪問但是通過內部代碼是可以訪問WEB-INF中的資源的)
如果你的確想訪問資源文件的話必須將資源文件放到WebRoot目錄下就可以直接訪問了如下圖:
三、servlet訪問資源
1、可以用類加載器(資源文件在src目錄下)這種方式讀取資源文件只能放在src或者是src子目錄
InputStream is=PathDemo.class.getClassLoader().getResourceAsStream("a.txt");
2、使用servletContext上下文訪問資源(注:訪問的資源不能放到根目錄下 因為當發布的時候發布的是webRoot下面的東西,讀取資源的時候讀取的是服務器的東西)
這種方式比較靈活可以根據相對路徑獲取真實路徑從而對資源文件進行操作
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=URF-8"); ServletContext sc = getServletContext(); String root = sc.getRealPath("/"); String bPath = sc.getRealPath("/a.txt"); FileInputStream fis = new FileInputStream(bPath); byte[] b = new byte[10]; while(true){ int rs = fis.read(b); if(rs == -1){ break; } System.out.println(new String(b)); } }