web專案中獲取資源及資源路徑
阿新 • • 發佈:2019-01-09
public class PathServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("=============原始路徑(這樣寫不好使了!!!)==============");
// 之前main方法 中路徑按如下填寫,為什麼能活得到?
// 路徑相對的是虛擬機器開始執行的路徑. 在MyEclipse中, 執行main方法,虛擬機器執行開始於專案路徑.
// 執行tomcat的虛擬機器.開始路徑在tomcat的bin目錄下.所以以前的路徑填寫方式 不好使了
// FileInputStream fis = new FileInputStream("src/abc2.txt");
//正確寫法參考
FileInputStream fis = new FileInputStream("haha/abc.txt");
System.out.println("fis=" + fis);
System.out.println("=============ServletContext==============");
//相對於當前web應用
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/classes/com/first/servlet/abc.txt");
System.out.println("is=" + is);
InputStream is2 = getServletContext().getResourceAsStream("/WEB-INF/classes/abc2.txt");
System.out.println("is2=" + is2);
URL url = getServletContext().getResource("/WEB-INF/classes/abc2.txt");
String path = url.getPath();
System.out.println("path=" + path);
// String host = url.getHost();
// System.out.println("host=" + host);
System.out.println("==============Class=============");
//加"/"相對於classes目錄
InputStream stream = this.getClass().getResourceAsStream("/abc2.txt");
System.out.println("stream=" + stream);
//不加"/"獲取的是當前類所在包路徑
InputStream stream2 = this.getClass().getResourceAsStream("abc.txt");
System.out.println("stream2=" + stream2);
URL url2 = this.getClass().getResource("abc.txt");
String path2 = url2.getPath();
System.out.println("path2=" + path2);
URL url3 = this.getClass().getResource("/abc2.txt");
String path3 = url3.getPath();
System.out.println("path3=" + path3);
System.out.println("==============ClassLoader=============");
//加"/"和不加"/"都是想對於classes目錄下
ClassLoader loader = this.getClass().getClassLoader();
InputStream stream3 = loader.getResourceAsStream("/abc2.txt");
System.out.println("stream3=" + stream3);
InputStream stream4 = loader.getResourceAsStream("abc2.txt");
System.out.println("stream4=" + stream4);
URL url4 = loader.getResource("abc2.txt");
URL url5 = loader.getResource("/com/first/servlet/abc.txt");
System.out.println("url4=" + url4.getPath());
System.out.println("url5=" + url5.getPath());
}
//路徑相對的是虛擬機器開始執行的路徑. 在MyEclipse中, 執行main方法,虛擬機器執行開始於專案路徑.
public static void main(String[] args) throws Exception {
System.out.println("=============原始路徑==============");
FileInputStream fis = new FileInputStream("src/abc2.txt");
System.out.println("fis=" + fis);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("=============原始路徑(這樣寫不好使了!!!)==============");
// 之前main方法 中路徑按如下填寫,為什麼能活得到?
// 路徑相對的是虛擬機器開始執行的路徑. 在MyEclipse中, 執行main方法,虛擬機器執行開始於專案路徑.
// 執行tomcat的虛擬機器.開始路徑在tomcat的bin目錄下.所以以前的路徑填寫方式 不好使了
// FileInputStream fis = new FileInputStream("src/abc2.txt");
//正確寫法參考
FileInputStream fis = new FileInputStream("haha/abc.txt");
System.out.println("fis=" + fis);
System.out.println("=============ServletContext==============");
//相對於當前web應用
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/classes/com/first/servlet/abc.txt");
System.out.println("is=" + is);
InputStream is2 = getServletContext().getResourceAsStream("/WEB-INF/classes/abc2.txt");
System.out.println("is2=" + is2);
URL url = getServletContext().getResource("/WEB-INF/classes/abc2.txt");
String path = url.getPath();
System.out.println("path=" + path);
// String host = url.getHost();
// System.out.println("host=" + host);
System.out.println("==============Class=============");
//加"/"相對於classes目錄
InputStream stream = this.getClass().getResourceAsStream("/abc2.txt");
System.out.println("stream=" + stream);
//不加"/"獲取的是當前類所在包路徑
InputStream stream2 = this.getClass().getResourceAsStream("abc.txt");
System.out.println("stream2=" + stream2);
URL url2 = this.getClass().getResource("abc.txt");
String path2 = url2.getPath();
System.out.println("path2=" + path2);
URL url3 = this.getClass().getResource("/abc2.txt");
String path3 = url3.getPath();
System.out.println("path3=" + path3);
System.out.println("==============ClassLoader=============");
//加"/"和不加"/"都是想對於classes目錄下
ClassLoader loader = this.getClass().getClassLoader();
InputStream stream3 = loader.getResourceAsStream("/abc2.txt");
System.out.println("stream3=" + stream3);
InputStream stream4 = loader.getResourceAsStream("abc2.txt");
System.out.println("stream4=" + stream4);
URL url4 = loader.getResource("abc2.txt");
URL url5 = loader.getResource("/com/first/servlet/abc.txt");
System.out.println("url4=" + url4.getPath());
System.out.println("url5=" + url5.getPath());
}
//路徑相對的是虛擬機器開始執行的路徑. 在MyEclipse中, 執行main方法,虛擬機器執行開始於專案路徑.
public static void main(String[] args) throws Exception {
System.out.println("=============原始路徑==============");
FileInputStream fis = new FileInputStream("src/abc2.txt");
System.out.println("fis=" + fis);
}
}
檔案在工程中的位置: