gpt4 book ai didi

java - 从 "regular"文件或 jarred 文件读取资源文件

转载 作者:行者123 更新时间:2023-12-01 17:52:19 25 4
gpt4 key购买 nike

我们正在开发一个网络应用程序,并且需要从 resources 目录中读取一些文件。在初步开发和测试过程中,我们希望能够直接读取资源目录中的文件。另一方面,我们希望在部署 webapp 时从 jar 文件中读取资源文件。

我读过其他questions指示如何从 jar 中读取文件。这个想法的本质是获取一个 BufferedReader 并从中读取。

我编写了以下代码,允许我从文件系统或 jar 文件创建 BufferedReader,并传入文件名,例如myResource.txt 和 ClassLoader,例如getClass().getClassLoader()。看起来它可以做得更好和/或更简单。请帮忙。

 public static BufferedReader getBufferedReader(String fileToFind,
ClassLoader classLoader) {
BufferedReader bufferedReader = null;
// Try to find file in file system
final URL resource =
classLoader.getResource(fileToFind);
if (resource != null) {
String fileName = resource.getFile();
if (fileName != null) {
try {
final FileReader fileReader = new FileReader(fileName);
bufferedReader = new BufferedReader(fileReader);
}
catch (FileNotFoundException e) {} // no problem, move on
}
}
if (bufferedReader == null) {
// Try to find file in jar file
InputStream inputStream =
classLoader.getResourceAsStream(fileToFind);
final InputStreamReader streamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(streamReader);
}
return bufferedReader;
}

最佳答案

不要尝试将资源作为文件来寻址,只需要求 ClassLoader 通过 getResourceAsStream 返回资源的 InputStream:

InputStream in = getClass().getResourceAsStream("/file.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

只要 file.txt 资源在类路径上可用,那么无论 file.txt 资源是在 classes/目录中还是在 jar 中,此方法都将以相同的方式工作。

关于java - 从 "regular"文件或 jarred 文件读取资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48664870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com