因为在tomcat的环境下默认的路径会在tomcat的bin文件夹中,因此需要将路径索引到.class的文件夹
String src = new String(this.getClass().getClassLoader().getResource("/").getPath()+"文件名");
回来鞭尸:getClassLoader在我们的自己的项目文件夹下编写的类的类加载器classLoader一般是application类加载器,加载的默认路径是项目的根路径,在springboot项目中,也就是java/src路径
如果类加载器为NULL,说明加载这个类的是启动类加载器,bootstrap,默认加载lib文件夹下的.class文件。然后下面还有extension类加载 扩展类加载器,加载的是jre文件夹下的lib/ext目录。 下面就是application 应用类加载器,加载自己项目中的类。
如果还想加载其他文件夹中的,自己随意指定文件夹的字节码文件,还需要自己写一个类加载器。继承ClassLoader类,然后覆写findClass()方法,更改路径就行。
加载类一般三个主要方法
loadClass() , 通过双亲委派模式,让父类先寻找然后加载
findClass(),读取class文件到内存 , 会调用下面的defineClass来将字节码的二进制给转换成Class对象
defineClass()将字节数组转换成Class对象
获取输入流
File file = new File(src);
InputStreamReader isr = new InputStreamReader(new FileInputStream(file),"UTF-8");
因为默认的是UNICODE,需要指定用UTF-8编码读取,否则会乱码。
//按行读取
reader = new BufferedReader(isr);
String tempString = null;
while ((tempString = reader.readLine()) != null) {
sList.add(tempString);
}