-
方式一:
-
创建配置文件 (properties)
-
利用 InputStream getResourceAsStream(String path)(注意这里的path应该是发布后的如/WEB-INF/classes)获得一个输入流,是相对于web应用的根目录
-
然后用我们以前学过的Properties来对文件中的键值(会用到load(InputStream inStream)和String getProperty(String key))
Ex:
//第一种方式
/*Properties pro = new Properties();
pro.load(this.getServletContext().getResourceAsStream("/file/p.poperties"));
String name =pro.getProperty("name");
String address =pro.getProperty("address");
response.getWriter().print(name+":"+address);*/
-
方式二
通过String getRealPath(String path)方法可以通过相对路径获得绝对路径,然后就可以同输入流来读资源。(直接使用输入流是不可以的,因为其相对的路径是jdk的bin目录) -
Ex
//第二种方式
/*Stringpath = this.getServletContext().getRealPath("/file/p.poperties");
Properties pro= new Properties();
pro.load(newFileInputStream(path));
String name =pro.getProperty("name");
String address =pro.getProperty("address");
response.getWriter().print(name+"::"+address);*/
-
普通的java类怎么来读取外部文件
那就只有用类装载器(ClassLoader)(查阅javase手册)
-
InputStream getResourceAsStream(String path)(这里的path是相对于classes文件夹)(不可以取得实时更新的内容)
InputStream in =ServletDemo4.class.getClassLoader().getResourceAsStream("pro.properties");
-
-
URL getResource(String name) (可以取得实时更新的内容)
String path = ServletDemo4.class.getClassLoader().getResource("pro.properties").getPath();
-
Ex:
public classClassLoaderDemo {
public Stringload() throws IOException{
//这种方式不会自动更新(因为是类加载器加载的所以只加载一次)
//InputStream in =ClassLoaderDemo.class.getClassLoader().getResourceAsStream("/cn/java/p.poperties");
//这种方式可以自动更新(此方法是得到绝对路径后在创建输出流)
InputStream in = newFileInputStream(ClassLoaderDemo.class.getClassLoader().getResource("/cn/java/p.poperties").getPath());
//这种方式就是访问的webroot下file中的p.poperties
//InputStream in = new FileInputStream(ClassLoaderDemo.class.getClassLoader().getResource("../../file/p.poperties").getPath());
Properties p = newProperties();
p.load(in);
String name = p.getProperty("name");
String address = p.getProperty("address");
return name+"::"+address;
}
}