在优化JDBCdemo5的时候,使用到了工具类。在工具类中有一步是使用静态代码块来实现读取配置文件的功能。
其中某个方法刚好需要获取配置文件的路径。于是就出现了问题:到底如何把简单的相对路径给正确传进相应参数呢
虽然说使用绝对路径可以,可是太过复杂了。
解决方法:使用ClassLoader 类加载器。
功能: 1.加载字节码文件进内存
2.获取src下资源文件的路径
以下为程序中的源代码:
/*1.2.5 路径的正确写法,在1.3使用load()方法加载配置文件时,会遇到文件路径的问题,如果写绝对路径的话,虽然可以但是太low
所以 ,获取src路径下的文件的路径的方式-------ClassLoader 类加载器,1.加载字节码文件进内存 2.获取src下资源文件的路径
*/
ClassLoader cl = JDBCgongjulei.class.getClassLoader();
//获取ClassLoader对象,需要通过字节码文件的对象来调用方法,
//随便一个字节码文件对象都可以,这里使用本类这个字节码文件对象
URL res = cl.getResource("jdbc.properties");
//通过类加载器对象的方法获取URL对象。这方法传一个文件名的参数就可获取其资源,注意是以src为根路径
//返回的是一个URL对象,统一资源定位符对象,指向相应的文件,可以获取文件的绝对路径
String path = res.getPath();//把URL对象(路径)“转”成字符串类型的数据
System.out.println(path);//显示的是绝对路径
短短几行,利用了一个类的一个方法,就解决了这个相对路径问题。
可是背后的机制,以及一些知识没有搞清楚。
1.字节码文件是什么意思? 其对象又是啥
2.类加载器 类到底是什么,与之前学的反射机制有什么联系?
3.随便一个字节码文件对象都可以调用方法并得到类加载器对象,该机制的原因是啥??
4.当我把配置文件放在src目录下的一个包下时,程序并不能成功找到配置文件
而当我直接把配置文件放在src目录下,才能找得到。
为什么一定要放在src目录下,以及为啥一定是src?
5.使用类加载器来解决该问题,实质本质上是对什么进行何种操作?
6.除了使用类加载器来解决这样的问题,还能用什么方法?
解决:
思路一:读APK文档,看看该类的具体信息
并且结合程序,以总结的角度审视程序
尝试1:今天回去看之前的B/S模型服务器代码时,发现一个问题。是浏览器那边输入绝对路径的,不是服务器这边的代码导致要写绝对路径的。
所以当我要去改代码的时候,发现没有可以着手的地方
于是我发现,这个相对路径的问题(在之前网络编程的那里出现的)根本没有解决
接着我尝试着用 if(line=“xxx”)这样的语句写,还是没有成功