2017-09-24 179 views
0

包括外部文件我创建了一个弹簧引导应用,其读取Excel文件用于向在前端所以基本上持久性数据的其源极被显示的数据。我能够从我的eclipse正确运行,但是当我创建一个弹簧引导jar并从命令行运行它失败,因为文件不包含在jar中。春季启动JAR

我已经尝试了两种位置的src /主/资源/ src目录/主/ web应用/ WEB-INF /外部/但在这两种情况下,不包含这些文件。

代码:

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

有人可以帮忙吗?

+0

,请复制粘贴,你指的是文件 – zuckermanori

+0

https://stackoverflow.com/questions/22886083/how-do-i-run-a-spring-boot-executable-jar-in-a代码 - 生产环境 –

+0

喜@zuckermanori下面是代码:我从两个文件(把它们当作两个独立的数据库表) 私有静态最后弦乐FILE1 =“\\ \\的src主要\\ \\ web应用WEB读取数据-INF \\外部\\ file1.csv“; private static final String FILE2 =“\\ src \\ main \\ webapp \\ WEB-INF \\ external \\ file2.csv”;私人静态字符串completeAbsolutePath = currentDir.substring(0,currentDir.length() - 1).replace(“\\”,“\\\\”); reader = new CSVReader(new FileReader(completePath + FILE1)) –

回答

1

您这里有两个问题:

  1. 你把资源下src文件夹 而不是创建一个指定的文件夹中的资源,并把它放在那里。 要做到这一点,你应该建立在同一 水平“SRC”右键单击该文件夹名为“资源”的文件夹,选择“标记目录作为 - > 资源根”
  2. 你是指用文件相对路径。这可能在日食 中工作,但是当你将它作为一个jar改变路径并且 相对路径不再正确时运行它。

    要使用这样的资源,您应该使用ClassLoader API ClassLoader.getResourceAsStream(String name)来获得您的资源。

    应该类似于以下内容:

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

    文件1)));

+0

你打开了罐子,看到文件不在那里吗? – zuckermanori

+0

我能够使用您提供的语句将文件包含在jar中。我已经将该文件放在资源文件夹中,而且它们被包含在JAR文件中。谢谢。该应用程序仍然没有从命令提示符运行,但这是我认为的另一个问题。 –