我们可能用过下面这种方式来读取一个文件,请注意这种方式是把路径写死的。并且还有一个问题是,在windows操作系统的编辑器下,默认路径是project的根,这样写是没问题的,但是如果我们的代码移植到了linux中,这个路径就无效了。
public static void main(String[] args) throws ClassNotFoundException, FileNotFoundException {
FileReader fr=new FileReader("com.donglijiedian.reflectDemo.Student");
}
所以一般情况下我们不用上面那种方式表示一个文件的路径,而是采用下面这种方式。下面这种方式获取的文件路径是文件的绝对路径,并且在不同的系统下是通用的。
- Thread.currentThread()是获取当前线程
- getContextClassLoader()是线程的方法,能获取当前线程的类加载器
- getResource()是类加载器的方法,当前线程的类加载器默认是从类的根路径下加载资源
- 类的路径是src
public class ReflectTest1 {
public static void main(String[] args) throws ClassNotFoundException, FileNotFoundException {
//FileReader fr=new FileReader("com.donglijiedian.reflectDemo.Student");
String filename=Thread.currentThread().getContextClassLoader().getResource("com/donglijiedian/db.properties").getPath();
System.out.println(filename);
FileReader fr2=new FileReader(filename);
}
}