Java 如何将带有头的csv文件流式传输到HashMap<;字符串,双>;在爪哇?

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

我有一个示例csv文件,如下所示(一个虚拟csv文件结构供参考):

我正在尝试将此csv文件读入一个
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,它更接近于显示您的问题。因为您的示例文件没有重现问题,所以无法确定。找出哪一行给出了异常,您可能会发现问题所在。