一、普通的java类怎么来读取外部文件:
那就只有用类装载器(ClassLoader)
Class Loader的作用:
基本上所有的类加载器都是 java.lang.ClassLoader类的一个实例。
- 它是用来加载 Class 的。它负责将 Class 的字节码形式转换成内存形式的 Class 对象。
- 除此之外,ClassLoader还负责加载 Java 应用所需的资源,如图像文件和配置文件等。
二、实例:
1、如何利用ClassLoader读取资源文件
首先要在web下边创建一个文件夹file,然后再file中创建一个p.properties文件
例:
drive=com.oracle.driver
url=lcoalhost:3306//db_test1
user=haoren
pass=123456
2、创建一个普通Java类来读取
方式一:URL getResource(String name) (可以取得实时更新的内容) String path = ServletDemo4.class.getClassLoader().getResource("pro.properties").getPat
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.io.InputStream;
//普通java类封装
//类加载器
//针对字节码
public class ReadFileDemo {
//方式一:Url对象
String pathlath = ReadFileDemo.class.getClassLoader().getResource(path).getPath();
try {
InputStream i = new FileInputStream(pathlath);
Properties p = new Properties();
try {
p.load(i);
System.out.print(p.getProperty("url"));
}catch (IOException e){
e.printStackTrace();
}
}catch (FileNotFoundException e){
e.printStackTrace();
}
}
}
方式二:InputStream getResourceAsStream(String path)(这里的path是相对于classes文件夹) InputStream in = ServletDemo4.class.getClassLoader().getResourceAsStream("pro.properties");
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.io.InputStream;
//普通java类封装
//类加载器
//针对字节码
public class ReadFileDemo {
//方式二:普通类读取外部文件相对路径是classes
public static void readFile(String path){
InputStream in = ReadFileDemo.class.getClassLoader().getResourceAsStream("path");
//try抛出异常
Properties p = new Properties();
try {
p.load(in);
String url = (String)p.get("url");
System.out.print(url);
}catch (IOException e){
e.printStackTrace();
}
}
}
3、创建一个Servlet类执行上面的普通java类
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletDome")
public class ServletDome extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
new ReadFileDome().readFile("file/datainfor.properties");//这里跟文件的相对路径
}
}
运行结果: