我正在尝试将CSV文件中的数据添加到列表中。目前,我在下面有这段代码,但是只要我尝试运行它,应用程序都会关闭。
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/