我正在尝试将CS​​V文件中的数据添加到列表中。目前,我在下面有这段代码,但是只要我尝试运行它,应用程序都会关闭。

private HashMap<String, GeoLocation> loadLocationData() {
    String csvFile = "C:\\Users\\MyName\\Documents\\MyApplication\\app\\src\\main\\res\\raw\\geo_locations.csv";
    String line = "";
    String cvsSplitBy = ",";

    try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {

        while ((line = br.readLine()) != null) {
            String[] cityloc = line.split(cvsSplitBy);
            locations.put(cityloc[0], new GeoLocation(cityloc[0], Double.parseDouble(cityloc[1]), Double.parseDouble(cityloc[2]), TimeZone.getTimeZone(cityloc[3])));
       }
    } catch (IOException e) {
        e.printStackTrace();
    }

    return locations;
}


我已经问过有关读取CSV文件的问题,并且还得到了其他问题的列表,但是,在进行处理之后,我无法在此处解决问题。

我需要做的基本要点是从CSV文件中获取该列表,然后从中创建一个列表,然后将其添加到“位置”中。

最佳答案

不要尝试手工解析CSV,因为这种格式有很多特殊情况(引号转义等)。使用univocity-parsers,它应该可以正常工作。

试试这个代码:

    CsvParserSettings config = new CsvParserSettings();
    //configure what you need by hand, or just do this:
    config.detectFormatAutomatically();

    CsvRoutines csv = new CsvRoutines(config);

    File input = new File("C:\\Users\\MyName\\Documents\\MyApplication\\app\\src\\main\\res\\raw\\geo_locations.csv");

    Map<String, GeoLocation> locations = new LinkedHashMap<String, GeoLocation>();
    for(GeoLocation geo : csv.iterate(GeoLocation.class, input)){
        locations.put(geo.city, geo);
    }


我的GeoLocation实现:

public class GeoLocation{
    @Parsed(index = 0)
    String city;
    @Parsed(index = 1)
    Double longitude;
    @Parsed(index = 2)
    Double latitude;
    @Parsed(index = 3)
    TimeZone timeZone;

    public void setTimeZone(String timeZone){
        this.timeZone = TimeZone.getTimeZone(timeZone);
    }
}

关于java - 在android中读取CSV文件并将其放入Hashmap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40337647/

10-09 12:46