2016-10-01 61 views
0

我已經用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

你是如何試圖訪問該文件?你能分享涉及的代碼和拋出的異常嗎? –

回答

0

您不能訪問一個罐子中的文件(見https://stackoverflow.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) { 
     ... 
    } 
}