尝试访问jar中的文本文件时,Fat Jar throw File找不到异常

时间:2016-10-01 05:10:56

标签: maven spring-mvc jar spring-boot

我已经使用Tree数据结构构建了一个Spring引导MVC应用程序来代替实际的数据库。程序从文本文件中读取并在树中存储单词。最初我使用了一个CommandLineRunner类来填充树,这可以工作......但是在创建一个胖jar并运行jar之后,我得到一个找不到文件的异常。我怎样才能用maven构建一个包含maven的文本文件的胖罐?

该文件当前位于项目根目录中。

这是生成树的逻辑:

@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;
}
}

1 个答案:

答案 0 :(得分:0)

您无法访问jar中的文件(请参阅https://stackoverflow.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) {
        ...
    }
}