使用classpath在java中加载CSV

时间:2018-06-07 03:39:44

标签: java spring csv

如何使用classpath加载csv文件? 在此之前,我尝试使用FileReader加载文件,该文件在本地运行时工作正常但在部署到外部服务器时抛出FileNotFound等异常。下面的代码在本地工作,但是当部署时,tomcat文件夹www / [jar]上的jar会抛出此异常  不幸的是,我无法提供原始代码。这是要点:

BufferedReader br = new BufferedReader(new FileReader("src/SSR.csv"));
    while ((line = br.readLine()) != null) {
        // use comma as separator
        String[] cols = line.split(",");
        map.put(cols[1],cols[0]); 

this is the exception

2 个答案:

答案 0 :(得分:1)

这里你应该考虑两件事

  1. 正如我们的同事已经说过的那样,当代码在jar中运行并且您想要加载类路径资源时,您无法使用您已经说过的FileReader方法。
  2. 您当前的代码假定CSV位于工件外部的FileSystem中,这可能不正确,因此它只是找不到该文件。

    此处的正确方法是使用getClass().getResourceAsStream() / getClass().getClassLoader().getResourceAsStream()

    1. CSV文件可能很复杂,尽管它们的结构看起来很简单。因此,如果您从事的是现实生活中的项目,而不是为了学习目的而做某种功课,我强烈建议您使用3rdparty库来处理CSV:

    2. ......仅举几例

答案 1 :(得分:1)

由于您使用spring标记了问题,因此我想指出Spring Framework提供的资源实现。文档可在以下网址找到:

Spring Support for Resources

对于你的csv文件

Resource csv = context.getResource("classpath:some/resource/path/my.csv");
InputStream inputstream = csv.getInputStream();

应该是一个起点。资源接口提供了

File getFile() throws IOException;

方法,但这仅在文件驻留在文件系统中时才有效。因此,对于您的情况,您应该使用我认为的输入流方法。

编辑: 在这里,您可以使用ClassPathResource找到另一个答案 https://stackoverflow.com/a/44412189/7634201

相关问题