在Spring Boot JAR中包含外部文件

10 浏览
0 Comments

在Spring Boot JAR中包含外部文件

我创建了一个Spring Boot应用程序,它从Excel文件中读取数据,以在前端显示,基本上它是持久数据的来源。我能够在我的eclipse中正确运行它,但是当我创建一个Spring Boot JAR文件并从命令行运行它时,由于文件没有包含在JAR中,所以失败了。\n我尝试了两个位置:src/main/resources和/src/main/webapp/WEB-INF/external/,但在两种情况下,文件都没有被包含。\n代码:\n

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))

\n错误:\n

\njava.io.FileNotFoundException:\n c:\\delete\\src\\main\\webapp\\WEB-INF\\external\\File1.csv\n

\n有人能帮忙吗?

0
0 Comments

在Spring Boot JAR中包括外部文件的问题可能出现的原因是:

1. 将资源文件放在了`src`文件夹下,而没有创建一个专门的资源文件夹并将文件放在其中。应该在与`src`文件夹同级的位置创建一个名为"resources"的文件夹,并将文件放在其中。右键点击该文件夹,选择"Mark Directory As -> Resources Root"。

2. 引用文件时使用了相对路径。这在eclipse中可能有效,但在将其作为jar文件运行时,路径会发生改变,相对路径就不再正确。要使用这样的资源,应该使用`ClassLoader`的API`ClassLoader.getResourceAsStream(String name)`来获取资源。示例代码如下:

reader = new CSVReader(new InputstreamReader(ClassLoader.getResourceAsStream(completePath + FILE1)));

文章整理如下:

你在这里有两个问题:

  1. 你把资源文件放在了`src`文件夹下,而没有创建一个专门的资源文件夹并将文件放在其中。应该在与`src`文件夹同级的位置创建一个名为"resources"的文件夹,并将文件放在其中。右键点击该文件夹,选择"Mark Directory As -> Resources Root"
  2. 引用文件时使用了相对路径。这在eclipse中可能有效,但在将其作为jar文件运行时,路径会发生改变,相对路径就不再正确。要使用这样的资源,应该使用`ClassLoader`的API`ClassLoader.getResourceAsStream(String name)`来获取资源。示例代码如下:

    reader = new CSVReader(new InputstreamReader(ClassLoader.getResourceAsStream(completePath + FILE1)));
    

你打开jar文件后看到文件不在那里了吗?

我使用你提供的语句成功将文件包含在jar文件中。我将文件放在了资源文件夹中,然后它们就被包含在了JAR文件中。谢谢。不过,应用程序仍无法从命令提示符中运行,但我认为这是另一个问题。

0