JDBC使用反射读取properties文件出错

使用反射获取类加载器来读取properties文件出现空指针异常,可以使用直接使用输入流读取properties文件,为什么教学视频中却可以使用反射?另外问下怎么在PC端提问,不是论坛发帖,单纯悬赏C币提问,我都是在手机上提,电脑上修改

@Test
 public   void getConnection() throws Exception {
 /*
 * 读取配置文件来获取数据库连接
 */
    Properties properties = new Properties();
 String driverClass = null;
 String jdbcUrl = null;
 String user = null;
 String password = null;

 InputStream in =    this.getClass().getClassLoader().getResourceAsStream("C:/Java/WprkSpace/JDBC/jdbc.properties");
 properties.load(in);
 driverClass = properties.getProperty("driver");
 jdbcUrl = properties.getProperty("jdbcUrl");
 user = properties.getProperty("user");
 password = properties.getProperty("password");

 Driver driver =  (Driver) Class.forName(driverClass).newInstance();
 properties.put("user", user);
 properties.put("password", password);

 Connection connerction = driver.connect(jdbcUrl, properties);

 System.out.println( connerction);
 in.close();
 }

图片说明
图片说明
图片说明
图片说明

6个回答

读取properties文件可以有多种方式,用IO或者用ClassLoader,绝对路径的用IO,相对路径可以用IO也可以用ClassLoader,因为相对路径是相对于Classpath的。一般来说用到ClassLoader的话都是用的相对路径了。

qq_34485818
Lin_Rock 这是我发的贴,但是我想单独提问,不发论坛贴
3 年多之前 回复

路径改成相对于SRC的路径吧。

beijing20110905
微风吹过的夏天2016 回复qq_34485818: 读取属性文件,API很简单,直接找一个例子照着写就行了,没必要在这个上面纠结。能实现就行,实现方法一般都有很多种。http://han2000lei.iteye.com/blog/377899
3 年多之前 回复
qq_34485818
Lin_Rock 相对于SRC的路径,就是用相对路径么?我用相对路径还是这个错误
3 年多之前 回复

classloader去加载的是classpath下的资源,加*会加载jar中的,否则会扫描普通文件,希望对你理解有帮助

        一般没有绝对路径这种用法吧,非要用试一试
        Properties props = new Properties(); 
        File file=new File("H:\\DESKTOP\\email.properties");
        props.load(this.getClass().getClassLoader().getResourceAsStream(file.getName()));
qq_34485818
Lin_Rock 开始我是用相对路径,后来找寻不到我才改用绝对路径,结果还是一样,应该不是文件路径问题
3 年多之前 回复

1,把jdbc.properties 放到src下 ,
2.

 public class CMConstant {
public static String getConfigureParameterFromJDBC(String paramString) {
        String str = CMConstant.getRootPath() + File.separator + "WEB-INF"
                + File.separator + "classes/config.properties";
        Properties localProperties = new Properties();
        try {
            FileInputStream localFileInputStream = new FileInputStream(str);
            localProperties.load(localFileInputStream);
            localFileInputStream.close();
        } catch (FileNotFoundException localFileNotFoundException) {
            logger.error("读取属性文件--->失败!- 原因:文件路径错误或者文件不存在");
            localFileNotFoundException.printStackTrace();
            return null;
        } catch (IOException localIOException) {
            logger.error("装载文件--->失败!");
            localIOException.printStackTrace();
        }
        return localProperties.getProperty(paramString);
    }

    public static String getRootPath() {
        String result = null;
        try {
            result = CMConstant.class.getResource("CMConstant.class").toURI()
                    .getPath().toString();
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }
        int index = result.indexOf("WEB-INF");
        if (index == -1) {
            index = result.indexOf("bin");
        }
        result = result.substring(1, index);
        if (result.endsWith("/"))
            result = result.substring(0, result.length() - 1);// 不包含最后的"/"
        return result;
    }
/**
     * 查找config/jdbc.properties里值
     * @Description: @param key
     * @Description: @return
     * @Last Modified: , Date Modified:
     */
    public static String getJDBCValue(String key) {
        String filePath = getRootPath() + File.separator + "WEB-INF\\classes"
                + File.separator + "config.properties";
        Properties propertie = new Properties();
        try {
            FileInputStream inputFile = new FileInputStream(filePath);
            propertie.load(inputFile);
            inputFile.close();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
            return null;
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return propertie.getProperty(key);
    }
}
FiangAsDre
GreenRookie 回复qq_34485818: @ @!!
3 年多之前 回复
qq_34485818
Lin_Rock 刚刚点错采纳了,真的不好意思
3 年多之前 回复
qq_34485818
Lin_Rock 不好意思,刚刚好像回复错了,是不是properties读取的只能是src目录下的文件?
3 年多之前 回复
qq_34485818
Lin_Rock 用properties读取普通属性文件不需要把文件放入src目录下,而用properties读取.properties文件却需要把文件放入src下呢?
3 年多之前 回复
FiangAsDre
GreenRookie 回复qq_34485818: // 读取一般的属性文件 FileInputStream fin=new FileInputStream("my.ini"); // 打开文件 Properties props=new Properties(); // 建立属性类 props.load(fin); // 读入文件 fin.close(); // 关闭文件 这样就能读取ini配置文件
3 年多之前 回复
qq_34485818
Lin_Rock 回复FengArWei: 我将properties问价放到src目录下就可以了 而加载ini配置文件却不需要呢?
3 年多之前 回复
FiangAsDre
GreenRookie 其中的key就是可以需要获取的值 你看看代码 理解下
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问