class.getClassLoader().getResourceAsStream加载不了类是咋回事

class.getClassLoader().getResourceAsStream加载不了类是怎么回事
写了个测试增删改查mysql数据库的java工程 在加载JdbcUtil.java时 死活加载不了 不知道怎么搞的 麻烦大家帮忙
class.getClassLoader().getResourceAsStream加载不了类是咋回事


下面是JdbcUtils.java
package cn.itcast.utils;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtils {

private static Properties config = new Properties();
private static InputStream s=JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");

static {

try {
config.load(s);
Class.forName(config.getProperty("driver"));
} catch (Exception e) {

throw new ExceptionInInitializerError(e);
}

}

// 链接数据库
public static Connection getConnection() throws SQLException {

return (Connection) DriverManager.getConnection(config.getProperty("url"), config.getProperty("username"),config.getProperty("password"));
}



// 回收资源
public static void release(Connection conn, Statement st, ResultSet rs) {

if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}

}
}

下面是sqlCDUF.java
package cn.itcast.demo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;




import cn.itcast.domain.User;
import cn.itcast.utils.JdbcUtils;



public class SqlCDUF {



public static void main(String[] args) {

try {
insert();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


//插入数据
public static void insert() throws SQLException{
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try
{
conn=JdbcUtils.getConnection();
st=(Statement) conn.createStatement();
String sql="insert into users(id,name,password,email,birthday) values('4','day14_test','123','aa@sina.com','1991-11-5');";
int num=st.executeUpdate(sql);
if(num>0){
System.out.println("插入成功!!!");
}else{
System.out.println("插入出错!!!");
}
}
finally{
JdbcUtils.release(conn, st, rs);
}

}
//删除数据

public void delete() throws SQLException{
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try
{
conn=JdbcUtils.getConnection();
st=(Statement) conn.createStatement();
String sql="delete from users where id=4;";
int num=st.executeUpdate(sql);
if(num>0){
System.out.println("删除成功!!!");
}else{
System.out.println("删除出错!!!");
}
}
finally{
JdbcUtils.release(conn, st, rs);
}
}
//更新数据
public void update() throws SQLException{
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try
{
conn=JdbcUtils.getConnection();
st=(Statement) conn.createStatement();
String sql="update users set name='update_name' where id=4;";
int num=st.executeUpdate(sql);
if(num>0){
System.out.println("更新成功!!!");
}else{
System.out.println("更新出错!!!");
}
}
finally{
JdbcUtils.release(conn, st, rs);
}
}
//显示所有数据
public void findAll() throws SQLException{
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try
{
conn=JdbcUtils.getConnection();
st=(Statement) conn.createStatement();
String sql="select id,name,password,email,birthday from users;";
rs=st.executeQuery(sql);
List list=new ArrayList();
while(rs.next()){
User user=new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setEmail(rs.getString("email"));
user.setBirthday(rs.getDate("birthday"));
list.add(user);
}
System.out.println(list);
}
finally{
JdbcUtils.release(conn, st, rs);
}
}
}

------解决思路----------------------
代码写错了,所以加载不了,修改下吧,具体如下:
根据楼主当前的目录结构,有2种写法:

JdbcUtils.class.getClassLoader().getResourceAsStream("cn/itcast/utils/db.properties");
JdbcUtils.class.getResourceAsStream("db.properties");

如果楼主直接新建一个和src同一目录级别的目录来管理资源文件,如新建目录为resource,可以有另一种写法:

static InputStream inputStream;
    static {
        try {
            inputStream = new FileInputStream(System.getProperty("user.dir")+ "/resource/db.properties");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

这几种实现方式本质上没有什么区别。关键操作在于如果获取目标资源路径来加载获取其输入流。前2者是根据类加载器(ClassLoader)来获取类目录中的资源路径,后者则是根据环境变量来获取。