首页 文章

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

提问于
浏览
0

我创建了一个spring boot应用程序,它读取excel文件,以便在前端显示数据,因此基本上它是持久数据的来源 . 我可以从我的日食中正确运行但是当我创建一个 spring 启动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:\ delete \ src \ main \ webapp \ WEB-INF \ external \ File1.csv

有人可以帮忙吗?

1 回答

  • 1

    你有两个问题:

    • 您将资源放在 src 文件夹下,而不是创建指定的资源文件夹并将其放在那里 . 要做到这一点,你应该创建一个名为"resources"的文件夹与"src"同一级别右键单击该文件夹,选择"Mark Directory As -> Resources Root"

    • 您指的是具有相对路径的文件 . 这可能在eclipse中有效,但是当你将它作为jar运行时,路径会发生变化,相对路径不再正确 .

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

    它应该类似于以下内容:

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

    FILE1)));

相关问题