Java 如何将带有头的csv文件流式传输到HashMap<;字符串,双>;在爪哇?
我有一个示例csv文件,如下所示(一个虚拟csv文件结构供参考): 我正在尝试将此csv文件读入一个Java 如何将带有头的csv文件流式传输到HashMap<;字符串,双>;在爪哇?,java,Java,我有一个示例csv文件,如下所示(一个虚拟csv文件结构供参考): 我正在尝试将此csv文件读入一个HashMap,其中键生成为(Col1+“|”+Col2+“|”+Col3+“|”+Col4+“|”+Col0),值为Col5 我在这里关注一篇类似的文章(),但在将Col5转换为double时出现如下错误: java.lang.NumberFormatException:空字符串 以下是我当前使用的代码: private void convertCsvtoMap(final String
HashMap
,其中键生成为(Col1+“|”+Col2+“|”+Col3+“|”+Col4+“|”+Col0),值为Col5
我在这里关注一篇类似的文章(),但在将Col5转换为double时出现如下错误:
java.lang.NumberFormatException:空字符串
以下是我当前使用的代码:
private void convertCsvtoMap(final String filePath) {
try {
Stream<String> lines = Files.lines(Paths.get(filePath));
Map<String, Double> resMap = lines.skip(1).map(line -> line.split(",")).collect(
Collectors.toMap(line -> (line[1] + "|" + line[2] + "|" + line[3] + "|" + line[4] + "|" + line[0]), line -> Double.parseDouble(line[5])));
} catch (IOException e) {
e.getLocalizedMessage();
}
}
private void convertCsvtoMap(最终字符串文件路径){
试一试{
streamlines=Files.lines(path.get(filePath));
Map resMap=lines.skip(1).Map(line->line.split(“,”).collect(
toMap(line->(line[1]+“|”+line[2]+“|”+line[3]+“|”+line[4]+“|”+line[0]),line->Double.parseDouble(line[5]);
}捕获(IOE异常){
e、 getLocalizedMessage();
}
}
我不会给出完整的解决方案,但这里有一种解决这个问题的方法
步骤:
private void convertCsvtoMap(final String filePath) {
try (Scanner in = new Scanner(new File(filePath))) {
String line = null;
Map<String, Double> resMap = new HashMap<>();
while (in.hasNextLine()) {
line = in.readLine();
String[] fields = line.split(",");
String key = fields[0].trim() + "|" + fields[1].trim() + ...;
double value = Double.parseDouble(fields[5].trim());
resMap.put(key, value);
}
} catch (Exception ex) {
/* Handle Exception */
}
}
- 读取文件(我正在使用扫描仪)
- 使用
分隔符拆分行,
- 使用拆分的值创建键和值
- 将其添加到地图中
private void convertCsvtoMap(final String filePath) {
try (Scanner in = new Scanner(new File(filePath))) {
String line = null;
Map<String, Double> resMap = new HashMap<>();
while (in.hasNextLine()) {
line = in.readLine();
String[] fields = line.split(",");
String key = fields[0].trim() + "|" + fields[1].trim() + ...;
double value = Double.parseDouble(fields[5].trim());
resMap.put(key, value);
}
} catch (Exception ex) {
/* Handle Exception */
}
}
private void convertCsvtoMap(最终字符串文件路径){
try(Scanner in=new Scanner(新文件(文件路径))){
字符串行=null;
Map resMap=newhashmap();
while(在.hasNextLine()中){
line=in.readLine();
String[]fields=line.split(“,”);
字符串键=字段[0]。trim()+“|”+字段[1]。trim()+。。。;
double value=double.parseDouble(字段[5].trim());
resMap.put(键、值);
}
}捕获(例外情况除外){
/*处理异常*/
}
}
注意:我没有编译代码,它可能有一些语法问题。公共静态映射csvToMap(文件csvFile)抛出FileNotFoundException{
public static Map<String, String> csvToMap(File csvFile) throws FileNotFoundException {
final Scanner scanner = new Scanner(csvFile);
String[] keys = scanner.nextLine().split(",");
Map<String, String> resultMap = new HashMap<>();
while (scanner.hasNextLine()) {
String[] values = scanner.nextLine().split(",");
for (int i = 0; i < keys.length; i++) {
resultMap.put(keys[i], values[i]);
}
}
return resultMap;
}
最终扫描仪=新扫描仪(csvFile);
字符串[]键=scanner.nextLine().split(“,”);
Map resultMap=new HashMap();
while(scanner.hasNextLine()){
字符串[]值=scanner.nextLine().split(“,”);
for(int i=0;i
在上面的示例中,值也存储为字符串。如有必要,您可以将这些值解析为映射的值类型。使用此示例文件,我得到一个不同的错误。发布一个示例CSV,它更接近于显示您的问题。因为您的示例文件没有重现问题,所以无法确定。找出哪一行给出了异常,您可能会发现问题所在。