在Spring启动JAR中包含外部文件

时间:2017-09-24 12:13:29

标签: java spring-boot

我创建了一个spring boot应用程序,它读取excel文件,以便在前端显示数据,因此基本上它是持久数据的来源。我可以从我的日食中正确运行但是当我创建一个弹簧启动jar并从命令行运行它时它会失败,因为文件不包含在jar中。

我已尝试过两个位置src / main / resources和/ src / main / webapp / WEB-INF / external /但在这两种情况下都不包含这些文件。

代码:

private static final String FILE1 = "\\src\\main\\webapp\\WEB-INF\\external\\file1.csv";
private static final String FILE2 = "\\src\\main\\webapp\\WEB-INF\\external\\file2.csv";
private static String currentDirectory = Paths.get(".").toAbsolutePath().toString();
private static String completeAbsolutePath = currentDirectory
                      .substring(0, currentDir.length() - 1)
                      .replace("\\", "\\\\");

reader = new CSVReader(new FileReader(completePath + FILE1))

错误:

  

java.io.FileNotFoundException:   C:\删除\ SRC \主\ web应用\ WEB-INF \外部\ File1.csv

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这里有两个问题:

  1. 您将资源放在src文件夹下 而不是创建指定的资源文件夹并将其放在那里。 要做到这一点,你应该创建一个名为" resources"在同一个 等级为" src"右键单击该文件夹,选择"将目录标记为 - > 资源根"
  2. 您指的是具有相对路径的文件。这可能有效 eclipse但是当你把它作为一个罐子运行时,路径会被改变 相对路径不再正确。

    要使用此类资源,您应使用ClassLoader API ClassLoader.getResourceAsStream(String name)获取您的资源。

    它应该类似于以下内容:

    reader = new CSVReader(new InputstreamReader(ClassLoader.getResourceAsStream(completePath +
    

    FILE1)));