我正在尝试读取Spring启动控制台应用程序的resources文件夹中的文件,但是我发现找不到文件异常。
这是我的pom
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
以下是例外:
java.io.FileNotFoundException: class path resource [9.txt] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/abc/Documents/workspace-sts-3.8.4.RELEASE/xyz/target/xyz-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/9.txt
我打开了xyz-0.0.1-SNAPSHOT.jar文件,9.txt在BOOT-INF / classes文件夹中。
谢谢, -dj
答案 0 :(得分:4)
它是Spring Boot,让我们使用ClassPathResource
@Component
public class MyBean {
@Value("9.txt")
private ClassPathResource resource;
@PostConstruct
public void init() throws IOException {
Files.lines(resource.getFile().toPath(), StandardCharsets.UTF_8)
.forEach(System.out::println);
}
}
更新:由于ClassPathResource支持解析为java.io.File,如果类路径资源位于文件系统中,但不支持JAR中的资源,则更好用这种方式
@Component
public class MyBean {
@Value("9.txt")
private ClassPathResource resource;
@PostConstruct
public void init() throws IOException {
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8))) {
bufferedReader.lines()
.forEach(System.out::println);
}
}
}
答案 1 :(得分:0)
这对我有用!
InputStream in = this.getClass().getResourceAsStream("/" + len + ".txt");
因为这不起作用
ClassPathResource resource = new ClassPathResource(len + ".txt");
File file = resource.getFile();
答案 2 :(得分:0)
在Spring Boot中,您可以使用ResourceLoader
从Resource文件夹中读取文件。这是从资源文件夹读取文件的有效方法。
第一个Autowire ResourceLoader
@Autowired
private ResourceLoader resourceLoader;
然后
Resource resource = resourceLoader.getResource(CLASSPATH_URL_PREFIX + "9.txt");
InputStream inputStream = resource.getInputStream();
答案 3 :(得分:0)
从 jar 文件中加载文件时,使用 resource.getInputStream()
而不是 resource.getFile()
。