Fat Jar throwing当试图访问jar中的文本文件时找不到文件异常
问题描述:
我已经用Tree数据结构代替实际的数据库构建了Spring启动MVC应用程序。该程序从文本文件读取并将单词存储在树中。最初我使用了一个CommandLineRunner类来填充树,它可以工作......但是在创建一个胖jar并运行该jar之后,我得到了一个没有找到文件的异常。我怎样才能用Maven构建一个包含maven文本文件的fat jar?Fat Jar throwing当试图访问jar中的文本文件时找不到文件异常
该文件当前处于项目根目录中。
这里是产生树逻辑:
@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class GenerateTree implements CommandLineRunner {
@Autowired
TreeRepository trie = new TreeRepository();
@Autowired
FileReader fileReader = new FileReader();
@Override
public void run(String... args) throws Exception {
for (String s : fileReader.readFile("wordList1.txt")){
trie.add(s);
}
}
}
这里是读取文件的逻辑:
@Component
public class FileReader {
List<String> readFile(String filename){
List<String> list = new ArrayList<>();
try (Stream<String> stream = Files.lines(Paths.get(filename))) {
list = stream
.filter(line -> line.matches("[a-zA-Z]+"))
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
}
答
您不能访问一个罐子中的文件(见https://*.com/a/8258308/4516887)。 把wordlist.txt
到src/main/resources
目录和使用[ClassPathResource][1]
读取其内容:
ClassPathResource resource = new ClassPathResource("worldlist.txt");
try (InputStream in = resource.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while((line = reader.readLine()) != null) {
...
}
}
你是如何试图访问该文件?你能分享涉及的代码和抛出的异常吗? –