0

我正在创建一个 Jar 文件来存储我的其他一些应用程序的通用代码。在其中一个类中,我想将 csv 文件加载到对象中,并允许使用 jar 的应用程序访问该对象。我正在使用 Java 8 和 Apache Commons-csv。

这是我目前拥有的:

public class MyServices {

    public static final String CSV_SRC = "src/main/resources/MyCSV.csv";

    private final List<MyCSVObj> allObjectsFromCSV;

    public MyServices() {
        this.allObjectsFromCSV = importMyCSV();
    }

    private List<MyCSVObj> importMyCSV() {
        try {
            Reader in = new FileReader(CSV_SRC);
            Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);
            List<MyCSVObj> ret = new ArrayList<>();
            for (CSVRecord record : records) {
                ... // Get all fields
                // Add fields to list
            }
            return ret;
        } catch (Exception e) {
            LOGGER.error("Could not load csv", e);
        }

        return new ArrayList<>();
    }

    ...
}

这在 Eclipse 中有效并通过了所有测试。但是,在将其编译为 jar 并尝试在其他项目中使用它之后,我得到了基于 FileNotFoundException 的指定异常“无法加载 csv”。

我一直在寻找该主题,并且许多人说要以流的形式获取资源。不幸的是,谷歌搜索“Java import csv as stream”,但这提供了一堆使用 Java 8 流而不是使用 CSV 库的手动 csv 解析。

我也尝试过,结果相同(通过了 eclipse 中的所有测试,但导入到其他项目时文件不加载):

FileInputStream is = new FileInputStream(CSV_SRC);
Reader in = new InputStreamReader(is);
Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);

和这个

Reader in = new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("MyCSV.csv"));
Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);

有关如何解决 FileNotFoundException 的任何建议?

4

0 回答 0