做网站的大创结项,前端后端,郑州做网站哪个公司好,深圳市住房建设与保障局官方网站getResource()方法是Class类中的一个获取文件的方法#xff0c;我在使用该方法稍微不注意经常会出现如下报错
Exception in thread main java.lang.NullPointerException 因此我觉得还是有必要写一篇博客来梳理以下该方法的误区、盲点。 首先getResource()方法可…getResource()方法是Class类中的一个获取文件的方法我在使用该方法稍微不注意经常会出现如下报错
Exception in thread main java.lang.NullPointerException 因此我觉得还是有必要写一篇博客来梳理以下该方法的误区、盲点。 首先getResource()方法可以通过getClass().getClassLoader().getResource()和getClass().getResource()两种方式调用这两种方式调用的区别在于 getClass().getClassLoader().getResource()这个方法是通过类加载器来加载资源的。它从类路径的根目录开始搜索资源。 返回的 URL 是绝对路径不受调用类的包所影响。 getClass().getResource()这个方法是通过当前类的 class 文件所在的位置作为相对路径来搜索资源的。 返回的 URL 是相对路径受调用类的包的影响。 总结来说就是
getClass().getResource(fileName)表示只会在当前调用类所在的同一路径下查找该fileName文件getClass().getClassLoader().getResource(fileName)表示只会在classpath根目录下/查找该文件fileName如果是前面加“/”如/fileName则表示绝对路径取/目录下的该文件如果是前面没有加“/”如fileName则表示相对路径取与调用类同一路径下的该文件。getClassLoader()表示/目录,即classpath根目录
比如说在com/***/A包下存在一个文本文件那么在同一文件夹下的类获取该资源的方法如下
clazz.getClass().getResource(1.text);//相对路径获取
clazz.getClass().getResource(/com/***/A/1.text);//绝对路径获取
clazz.getClass().getClassLoader().getResource(com/***/A/1.text);//com前不需要加“/” 而不同包的类获取该资源比如说com/***/B包下的类获取则需要填写如下获取路径
clazz.getClass().getResources(../A/1.text);
clazz.getClass().getResources(/com/***/A/1.text);
clazz.getClass().getClassLoader().getResources(com/***/A/1.text);