前言:今天准备写一个数据库连接池,想着把一些固定的参数,放到外部文件里面,而不用直接相这样,Class.forName("com.mysql.jdbc.Driver");写死在代码里面。于是新建了一个包config,在包里面新建一个dbpool.properties的文件,用来存放一些固定的字符串,然后在DBPool.java中新建一个方法,用于读取properties文件的内容。于是得通过文件路径获取输入流,再通过Properties类的load();方法得到文件内容,文件就来了。
问题:文件的路径改怎么写呢?以前写输入输出流代码的时候,直接就进入系统文件管理器里面找到文件路径就ok了,就想这样,D:\java_src\myeclipse\iShop\src\com\jake\config\dbpool.properties,直接粘到输入流就行了,这样,当然在你的电脑里运行自己写的程序,当然没有问题,可是你的项目如果一旦布置到其他的电脑上,也许路径就不是这样了,甚至布置到其他的系统上,这种路径更是不可能存在了,如何获取文件路径呢?
解决:看到下面的例子就就会明白了,以后这个文件的路径问题就好解决了。
首先这是我的项目结构图,文件在config包里面,而需要在DBPool类里面用上文件里的数据。
如何用?
然后编写一个方法,叫ini(),把文件里的数据读出来:
- public void iniPool(){
- InputStream in = DBPool.class.getResource("/com/jake/config/dbPool.properties");
- Properties pro = new Properties();
- pro.load(in);
- String class_name = pro.getProperty("class_name");
- }
这样就可以把文件里的键值对取出赋值给变量,后面的文件路径问什么这么写,看下面的图片,相信你就会明白为什么了。
这是我写的测试方法:
其中DBPool.class打印出来是类的包路径,自动调用toString方法打印出来;
getResource(),是为了找到资源文件,如果不存在就返回null;而getResource("")指的是除了类名的前面的路径,而加上"/",则指的是类包的根目录,不管什么类都是这样的,只可能是classes的路径,比如Class类:Class.class.getResource("/")得到的还是项目的classes的目录路径,这样就确保将来如果把项目移到其他的系统上时,路径会更随自己变动,而不是写死的固定路径。