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; 
} 
} 
+0

你是如何试图访问该文件?你能分享涉及的代码和抛出的异常吗? –

您不能访问一个罐子中的文件(见https://*.com/a/8258308/4516887)。 把wordlist.txtsrc/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) { 
     ... 
    } 
}