比较Class.getResource与Class.getClassLoader().getResource两种方式读取资源文件

 1 /**
 2  * @author zhangboqing
 3  * @date 2018/7/10
 4  */
 5 public class FileDemo {
 6
 7
 8     public static void main(String[] args) {
 9 //        demo1();
10 //        demo2();
11
12 //        demo3();
13 //        demo4();
14     }
15
16
17     //=====================================================
18     //        1.Class.getResource(String path)
19     //=====================================================
20     //Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。
21     //path不以’/‘开头时,默认是从此类所在的包下取资源;
22     //path  以’/‘开头时,则是从ClassPath根下获取;
23
24     private static void demo1() {
25         System.out.println(FileDemo.class.getResource(""));
26         System.out.println(FileDemo.class.getResource("/"));
27
28         //file:/Users/zhangboqing/Software/MyGithub/java_knowledge_sea/java_base/target/classes/com/zbq/base/file/
29         //file:/Users/zhangboqing/Software/MyGithub/java_knowledge_sea/java_base/target/classes/
30     }
31     private static void demo2() {
32         // 当前类(class)所在的包目录
33         System.out.println(FileDemo.class.getResource(""));
34         // class path根目录
35         System.out.println(FileDemo.class.getResource("/"));
36
37         // TestMain.class在com.zbq.base.file包中
38         // 2.properties  在com.zbq.base.file包中
39         System.out.println(FileDemo.class.getResource("2.properties"));
40
41         // FileDemo.class在com.zbq.base.file包中
42         // 3.properties  在com.zbq.base.file.demo包中
43         System.out.println(FileDemo.class.getResource("demo/3.properties"));
44
45         // FileDemo.class在com.zbq.base.file包中
46         // 1.properties  在(class根目录)
47         System.out.println(FileDemo.class.getResource("/1.properties"));
48     }
49
50     //======================================================================
51     //        2.Class.getClassLoader().getResource(String path)
52     //======================================================================
53     //Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的
54     //path不能以’/‘开头时;
55     //path是从ClassPath根下获取;
56
57     private static void demo3() {
58         FileDemo t = new FileDemo();
59         System.out.println(t.getClass());
60         System.out.println(t.getClass().getClassLoader());
61         System.out.println(t.getClass().getClassLoader().getResource(""));
62         System.out.println(t.getClass().getClassLoader().getResource("/"));//null
63     }
64
65     private static void demo4() {
66         FileDemo t = new FileDemo();
67         System.out.println(t.getClass().getClassLoader().getResource(""));
68
69         System.out.println(t.getClass().getClassLoader().getResource("1.properties"));
70         System.out.println(t.getClass().getClassLoader().getResource("com/zbq/base/file/2.properties"));
71         System.out.println(t.getClass().getClassLoader().getResource("com/zbq/base/file/demo/3.properties"));
72     }
73 }

原文地址:https://www.cnblogs.com/756623607-zhang/p/9292176.html

时间: 2024-11-02 15:17:24

比较Class.getResource与Class.getClassLoader().getResource两种方式读取资源文件的相关文章

springMVC两种方式实现多文件上传及效率比较

springMVC实现 多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实 现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距. 1.下载相关jar包. 需要引入的jar出了springMVC的jar包外,还需要引入 com.springsource.org.apache.commons.fileupload-1.2.0.jar和

sparkStreaming读取kafka的两种方式

概述 Spark Streaming 支持多种实时输入源数据的读取,其中包括Kafka.flume.socket流等等.除了Kafka以外的实时输入源,由于我们的业务场景没有涉及,在此将不会讨论.本篇文章主要着眼于我们目前的业务场景,只关注Spark Streaming读取Kafka数据的方式. Spark Streaming 官方提供了两种方式读取Kafka数据: 一是Receiver-based Approach.该种读取模式官方最先支持,并在Spark 1.2提供了数据零丢失(zero-d

k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令: kubectl apply -f nginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML

创建资源的两种方式

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建 kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建 要完成前面同样的工作,可执行命令: [[email protected] k8s]# kubectl apply -f nginx.yaml deployment.extens

文件的高级应用及修改的两种方式

文件的高级应用及修改的两种方式 一.文件的高级应用 可读.可写 r+t: 可读.可写 w+t: 可写.可读 a+t: 可追加.可读 # wt with open('36w.txt', 'wt', encoding='utf-8') as fw: print(fw.readable()) print(fw.writable()) False True # w+t with open('36w.txt', 'w+t', encoding='utf-8') as fw: print(fw.readab

通过java类获取项目绝对路径两种方式

经常会遇到通过java类获取项目路径,并且通过该相对路径或者绝对路径加载资源文件的问题.通常最常用的的两种方式是通过classLoader或者class的getResource()方法. public static final String getPath(){ String path1 = Constant.class.getClassLoader().getResource("").getPath(); String path2 = Constant.class.getClassL

org.apache.hadoop.yarn.conf.ConfigurationProviderFactory分析加载配置文件两种方式

ConfigurationProviderFactory结构如下: /** * Creates an instance of {@link ConfigurationProvider} using given * configuration. * @param bootstrapConf * @return configurationProvider */ @SuppressWarnings("unchecked") public static ConfigurationProvide

POI操作Excel详解,HSSF和XSSF两种方式

HSSF方式: package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.

动态加载dex的两种方式

DexClassLoader 加载的类是没有组件生命周期的,也就是说即使DexClassLoader通过对dex的动态加载完成了对组件的加载,当系统启动该组件时,还会出现加载类失败的异常.有两种方式可以解决上面出现的问题: 方法一:http://blog.csdn.net/androidsecurity/article/details/8809542,更改系统的classloader使其为自定义的加载器. 特点:两个dex具有明显的分割线,第一个dex只起启动作用,后面不会出现第一个dex的类加