【java】获取项目资源路径

 

    目资源路径分两种,一种是普通Java项目的资源路径,另一种是JavaEE项目的资源路径。

 

  • 获取Java项目的包(源码下的包 或者 jar包)的资源路径

 

// 方法1:通过this.getClass().getResoure("")获取, 有"/"开头表示以bin目录为根目录, 没"/"开头表示以当前文件夹为根目录 
this.getClass().getResource("/").getFile();
		
// 方法2:通过this.getClass().getClassLoader().getResource(""), 不允许以"/"开头, 默认以bin目录为根, 类似方法1中以"/"开头的情况
this.getClass().getClassLoader().getResource("").getFile();
		
// 方法3:通过ClassLoader.getSystemResource("")获取, 不允许以"/开头", 默认以bin目录为根, 同上
ClassLoader.getSystemResource("").getFile();
		
// 方法4:通过Thread.currentThread().getContextClassLoader().getResource("")获取, 同上【推荐】
Thread.currentThread().getContextClassLoader().getResource("").getFile();
		
// 方法5:通过new File("bin").getCanonicalPath()获取, 有"/"开头, 则以系统盘为根, 没"/"开头, 表示以bin目录为根 
new File("bin").getCanonicalPath();
		
// 方法6:通过System.getProperty("user.dir") + File.separator + "bin"来获取(不推荐)
System.getProperty("user.dir") + File.separator + "bin";
       据说方法4的系统兼容性最好,所以推荐第4种方法获取资源路径。

 

    

 

 

  • 获取JavaEE项目的资源路径

    对于获取JavaEE中的资源,其实就是获取WEB-INF目录的父目录下的资源,而且src的源码编译后的class文件,也会存放在WEB-INF/classes文件夹下,所以获取JavaEE资源的方法,也适用于获取Java普通资源,方法如下:

// getRealPath()方法中的参数, 是否以"/"开头效果都是一样的, 都是以WEB-INF目录的父目录为根目录进行查找
request.getServletContext().getRealPath("");

 

 

 

 

总结:

  1. 通过getClassLoader().getResource()的方法, 只能获取package(包括jar包的资源)里面的资源

     

  2. 若想获取项目下普通目录的资源,可以通过new File(path)的方式获取,路径默认以项目路径为根,以bin开始表示获取bin目录,以src开始表示获取src目录,以XXX开始表示获取项目下XXX目录,该方法最灵活,就算是JavaEE项目同样适用(例如WecContent,可以使用new File("WebContent")获取),唯一缺点就是不能获取jar里面的资源(因为jar包的资源不是以普通File的形式存储的)

### 回答1: Java可以通过以下代码获取项目resource路径: ``` String resourcePath = getClass().getClassLoader().getResource("").getPath(); ``` 其中,`getClass().getClassLoader().getResource("")`获取的是项目的根路径,`.getPath()`将其转换为字符串路径。如果需要获取某个具体资源路径,可以在引号内填写资源的相对路径,例如: ``` String resourcePath = getClass().getClassLoader().getResource("config.properties").getPath(); ``` 这样就可以获取项目中config.properties文件的路径了。 ### 回答2: 在Java获取项目的resource路径,可以使用以下方法来实现: 1. 使用Class.getResource(String path)方法:这种方法是最常用的,可以根据相对路径获取resource的绝对路径。例如,假设我们的resource文件夹在src/main/resources下,并且有一个名为config.properties的文件,我们可以使用以下代码获取该文件的路径: ```java String path = MyClass.class.getResource("/config.properties").getPath(); ``` 这里的"/config.properties"是相对于class文件的路径,如果需要获取class文件所在目录的路径,可以使用以下代码: ```java String path = MyClass.class.getResource("").getPath(); ``` 注意,获取到的路径是URL格式的,如果需要转换成文件路径可以使用URLDecoder.decode()方法。 2. 使用ClassLoader.getResource(String path)方法:这种方法与前一种方法类似,不过是使用ClassLoader来获取资源路径。例如: ```java String path = MyClass.class.getClassLoader().getResource("config.properties").getPath(); ``` 这种方法适用于在不同的类中获取resource路径。 需要注意的是,以上方法在打包成JAR文件后,无法获取资源路径,因为在JAR包中资源文件与class文件处于不同的路径。在这种情况下,通常可以使用ClassLoader.getResourceAsStream(String path)方法直接读取资源文件的内容,而不需要获取路径。 希望以上回答能够对您有所帮助。 ### 回答3: 在Java获取项目的resource路径可以使用ClassLoader类的getResource()方法。该方法可以返回一个URL对象,指向指定资源的位置。 首先,可以通过以下代码获取到ClassLoader对象: ClassLoader loader = Thread.currentThread().getContextClassLoader(); 接下来,使用ClassLoader对象的getResource()方法获取资源的URL,需要传入资源的相对路径作为参数。相对路径是相对于项目的根路径来确定的。 例如,假设在项目的resource文件夹下有一个名为config.properties的文件,可以通过以下代码获取路径: URL url = loader.getResource("config.properties"); 如果要获取资源的绝对路径,可以通过调用URL对象的getPath()方法来获取: String filePath = url.getPath(); 在获取资源路径后,可以根据具体需求来进行相应的处理,例如读取文件内容、加载图片等。 需要注意的是,如果在通过getResource()方法获取资源时,资源的相对路径以"/"开头,表示它是相对于classpath根目录的绝对路径,而不是项目根目录。 总结起来,通过ClassLoader的getResource()方法可以方便地获取项目的resource路径,进而对资源进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值