Java获取resources资源文件夹下的文件和文件流(Maven项目)

本文介绍如何使用Java类加载器获取resources目录下的文件,包括通过输入流读取配置信息和通过URL生成File对象的方法。

在开发项目中经常获取resources下的文件(配置文件及其他各种各样的文件),本文通过java代码获取其文件及输入流;

主要用类加载器的两个重要方法

  • InputStream in = getClass().getClassLoader().getResourceAsStream("log4j.properties");// 获取文件的输入流
  • URL url = getClass().getClassLoader().getResource("log4j.properties");// 获取文件的URL

一、通过类加载器获取资源文件的文件流,输入流的用途很多,看你自己怎么用都可以,如用在Properties获取配置信息,或者用来读图片,文本等等......例子:读取resources下的log4j配置文件信息;

@Test
public void testStream() throws IOException, URISyntaxException {
	// 获取输入流
	InputStream in = getClass().getClassLoader().getResourceAsStream("log4j.properties");
	// 新建配置对象
	Properties p = new Properties();
	// 通过输入流加载
	p.load(in);
	// 读取key
	String log4j = p.getProperty("log4j.rootLogger");
	System.out.println(log4j);
}

运行后如下:

 

、通过类加载器获取资源文件的URL,URL的用法也是更加强大,可用用URL对象干很多,比如生成File对象,等可查看URL的API,例子:读取resources下的log4j生成File对象

@Test
public void testStream() throws IOException, URISyntaxException {
	// 获取URL
	URL url = getClass().getClassLoader().getResource("log4j.properties");
	// 通过url获取File的绝对路径
	File f = new File(url.getFile());
	System.out.println("文件的名子是:" + f.getName());
	System.out.println("文件的大小是:" + f.length());
}

运行后如下:

以上两个方法对于获取resources下的文件很有用途,多多利用,能幻化出多种用途,以后有关于获取路径及相对路径的内容继续更新(完)

Maven项目获取resources目录下文件有多种方法: 1. **使用`ClassPathResource`获取文件输入流**:可以使用`ClassPathResource`来获取`resources`文件夹下某个文件的输入流。示例代码如下: ```java import org.springframework.core.io.ClassPathResource; import java.io.InputStream; public class ResourceExample { public static void main(String[] args) throws Exception { ClassPathResource classPathResource = new ClassPathResource("templates/" + "/导出洪水要素表模板.xlsx"); InputStream is = classPathResource.getInputStream(); } } ``` 这样就可以获取到指定文件的输入流进行后续操作,这里要注意路径的准确性[^1]。 2. **使用`Thread.currentThread().getContextClassLoader()`加载配置文件**:对于加载`src/main/resources`目录下的配置文件,可以使用`Thread.currentThread().getContextClassLoader().getResourceAsStream`方法。示例代码如下: ```java import java.io.InputStream; import java.util.Properties; public class DbDemo { public static void main(String[] args) { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"); Properties prop = new Properties(); try { prop.load(is); System.out.println(prop.get("user")); System.out.println(prop.getProperty("driver")); System.out.println(prop.getProperty("password", "root")); prop.forEach((k, v) -> { System.out.println(k); System.out.println(v); }); } catch (Exception e) { e.printStackTrace(); } } } ``` 此方法适用于加载如`.properties`、`.xml`、`.yaml`等配置文件[^2]。 3. **使用`ClassLoader`获取文件或输入流** - **获取`File`对象**:可以通过`ClassLoader`的`getResource`方法获取文件的`URL`,再转化为`File`对象。示例代码如下: ```java import java.io.File; import java.net.URL; public class App { private static void getFileFromResources() { URL url = App.class.getClassLoader().getResource("myfile/TestFile.properties"); File file = new File(url.getFile()); System.out.println(file); } public static void main(String[] args) { getFileFromResources(); } } ``` - **获取`InputStream`对象**:使用`ClassLoader`的`getResourceAsStream`方法可以直接获取文件的输入流。示例代码如下: ```java import java.io.InputStream; public class App { private static void getInputStreamFromResources() { InputStream is = App.class.getClassLoader().getResourceAsStream("myfile/TestFile.properties"); System.out.println(is); } public static void main(String[] args) { getInputStreamFromResources(); } } ``` 需要注意的是,这里取到的是编译后的路径,而不是`src/main/resources`的路径[^3]。 4. **使用`this.getClass().getResource``this.getClass().getClassLoader().getResource`** - `this.getClass().getResource(String path)`:使用相对路径时,最终生成路径为当前类所在路径 + path;使用绝对路径时,最终生成路径为项目路径 + path。 - `this.getClass().getClassLoader().getResource(String path)`:使用绝对路径返回`null`,使用相对路径时,最终生成路径为项目路径 + path。不过在实际使用时要注意路径格式上下文环境[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值