1. 使用 ClassLoader.getResourceAsStream() 方法
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("file.txt");
2. 使用 Class.getResourceAsStream() 方法
InputStream inputStream = getClass().getResourceAsStream("/file.txt");
3. 使用 ResourceLoader 加载文件
@Autowired private ResourceLoader resourceLoader;
Resource resource = resourceLoader.getResource("classpath:file.txt"); InputStream inputStream = resource.getInputStream();
4. 使用 ResourceUtils 加载文件
File file = ResourceUtils.getFile("classpath:file.txt");
5. 使用 ApplicationContext 加载文件
@Autowired private ApplicationContext applicationContext;
Resource resource = applicationContext.getResource("classpath:file.txt"); InputStream inputStream = resource.getInputStream();
6. 使用 ServletContext 加载文件
@Autowired private ServletContext servletContext;
InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/classes/file.txt");
7. 使用 File System 加载文件
File file = new File("src/main/resources/file.txt"); InputStream inputStream = new FileInputStream(file);
8. 使用 Paths 和 Files 加载文件
Path path = Paths.get("src/main/resources/file.txt"); InputStream inputStream = Files.newInputStream(path);
9. 使用 ClassPathResource 加载文件 (springboot项目 读取resources 推荐使用)
ClassPathResource resource = new ClassPathResource("file.txt"); InputStream inputStream = resource.getInputStream();
案例: 模拟springboot 装配bean
配置文件
package com.ldj.springboot.importbean.selector;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.util.CollectionUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
/**
* User: ldj
* Date: 2024/8/24
* Time: 23:54
* Description: No Description
*/
public class MyBeanSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
List<String> springBeanPaths = SpringFactoriesLoader.getSpringBeanPaths("spring.factories");
if (CollectionUtils.isEmpty(springBeanPaths)) {
throw new RuntimeException("spring.factories文件 缺少配置!");
}
return springBeanPaths.toArray(new String[0]);
}
}
// 读取要注入容器的类所在路径的配置文件
class SpringFactoriesLoader {
public static List<String> getSpringBeanPaths(String path) {
List<String> classPaths = new LinkedList<>();
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
InputStream inputStream = null;
String str;
try {
ClassPathResource classPathResource = new ClassPathResource(path);
inputStream = classPathResource.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(inputStreamReader);
while ((str = bufferedReader.readLine()) != null) {
System.out.println(str);
classPaths.add(str);
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (bufferedReader != null) {
bufferedReader.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return classPaths;
}
}
package com.ldj.springboot.importbean;
import com.ldj.springboot.importbean.config.ProductConfig;
import com.ldj.springboot.importbean.config.StoreConfig;
import com.ldj.springboot.importbean.selector.MyBeanSelector;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;
@Import(value = {MyBeanSelector.class})
public class ImportBeanApplication {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(ImportBeanApplication.class);
System.out.println(annotationConfigApplicationContext.getBean(ProductConfig.class));
System.out.println(annotationConfigApplicationContext.getBean(StoreConfig.class));
}
}
版权归原作者 ldj2020 所有, 如有侵权,请联系我们删除。