0
点赞
收藏
分享

微信扫一扫

SpringBoot--本地文件



获得绝对路径

当前项目绝对路径

String path = System.getProperty("user.dir") 

classes目录绝对路径

String path = ClassUtils.getDefaultClassLoader().getResource("xxx").getPath();

String path = ResourceUtils.getURL("classpath:xxx").getPath();

读取文件

何为classpath

        在Maven项目中,所有的resources文件都将被复制到classes目录下。classpath在tomcat项目中就是/classes,/lib和tomcat下的其他路径。

        对于开发者来说,一般就是classes所在目录就是classpath路径的起点和base path.

基于ApplicationContext

简介

  1. 在获取了ApplicationContext实例之后,即可通过getResource方法获取resource对象
  2. 在获取resource对象之后,就可以通过resource一些方法读取文件内容。
  1. getFile:获取File对象。注意:此法不能获取jar包内部的文件
  2. getInputStream:获取输入流。此法可以获取jar包内部的文件

获取 ApplicationContext的方法:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext context;

public void setApplicationContext(ApplicationContext context)
throws BeansException {
ApplicationContextHolder.context = context;
}

public static ApplicationContext getContext() {
return context;
}
}

使用fileSystem

Resource resource = ApplicationContextHolder.getApplicationContext().getResource(“file:d:\testing.jpg”);

使用url path

Resource resource = ApplicationContextHolder.getApplicationContext().getResource(“url:http://www.test.com/testing.txt“);

基于classpath

Resource resource = ApplicationContextHolder.getApplicationContext().getResource(“classpath:resources/common/test.txt”);

基于ResourceLoader

在Spring中专门提供了一个ResourceLoader的接口来方便进行classpath的路径访问。

第一步:创建ResourceLoader对象

方式1:基于Aware方式注入ResourceLoader:

public class MyBean implements ResourceLoaderAware {
private ResourceLoader resourceLoader;

public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}

public Resource getResource(String location){
return resourceLoader.getResource(location);
}
//.......
}

方式2:直接基于@Bean的方式在Spring Boot中创建对应的实例,具体方式如下:

@Bean
public ResourceLoader createResourceLoader() {
return new DefaultResourceLoader();
}

第二步:获取ResourceLoader的对象后,将可以基于如下方式来获取配置信息:

方式1:

Resource resource = resourceLoader.getResource(“classpath:resources/config.xml”);

方式2:

String content = IOUtil.toString(resourceLoader.getResource(“classpath:resources/test.txt”).getInputStream());

IOUtil是Apache common项目中的IO类库包,可以通过以下方式来直接加入依赖:

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>


举报

相关推荐

0 条评论