【问题标题】:Getting empty CSV files获取空的 CSV 文件
【发布时间】:2017-03-16 17:59:22
【问题描述】:

我正在尝试将 hashmap 数据写入 CSV 文件,但我看到正在生成空文件。这是我正在使用的以下代码:

String fileName
    for (String key : concurrentHashMap.keySet()) {
        logInfo(key + ": ")//gives the name of the file
        logInfo("concurrentHashMapKey" + concurrentHashMap.get(key))
        fileName = key
        logInfo("fileName: " + fileName)
        helpers.writeHashMapToCsv(concurrentHashMap, fileName)
    }

public void writeHashMapToCsv(ConcurrentHashMap<String, String> collectedCSV, String fileName) throws Exception {
        String eol = System.getProperty("line.separator")
        try{
            Writer writer = new FileWriter(".\\baseline-files\\" + fileName)
            for (Map.Entry<String, String> entry : collectedCSV.entrySet()) {
                println "entry = $entry"
                writer.append(entry.getKey())
                        .append(',')
                        .append(entry.getValue())
                        .append(eol)
            }
        } catch (IOException ex ) {
            ex.printStackTrace(System.err)
        }
    }

有人可以帮我看看我做错了什么吗?

注意: concurrentHashMap 大小 =2

concurrentHashMap = [NetworkLeakage_Main_crosstab.csv:占总付款总额的百分比 No Pro 沿 Serv Network,站点类型 Total Payments No Pro 家庭健康 网络外 1% $247,870 家庭健康拥有 6% $1,306,259 网络外专业护理机构 4% $860,545 拥有 18% 的熟练护理设施 $3,919,193 , IP_RehabSNF_Profiles_crosstab.csv: 设施站点类型 网络隶属关系 剧集数 总支付百分比 平均剧集支付 ALOS CMS 评级 LORRETTA HOSPITAL Anchor Owned 28 $344,392 2% $12,300 3
LORRETTA HOSPITAL 家庭健康 网络外 87 $14,358 0% $2,872
LORRETTA HOSPITAL 家庭健康 自有 19 $2,981 0% $2,981
LORRETTA HOSPITAL 网络外门诊 77 $3,706 0% $71
LORRETTA HOSPITAL 门诊自有 1,593 $149,194 1% $288
]

所以这里有 2 组键(文件名)和值(数据),我需要为其生成以下 2 个文件: 1. NetworkLeakage_Main_crosstab.csv

  1. IP_RehabSNF_Profiles_crosstab.csv

【问题讨论】:

标签: csv groovy concurrenthashmap


【解决方案1】:

改起来更简单:

        Writer writer = new FileWriter(".\\baseline-files\\" + fileName)
        for (Map.Entry<String, String> entry : collectedCSV.entrySet()) {
            println "entry = $entry"
            writer.append(entry.getKey())
                    .append(',')
                    .append(entry.getValue())
                    .append(eol)
        }

        new File("./baseline-files/$fileName").withWriter { writer ->
            collectedCSV.each { key, value ->
                writer.writeLine "$key,$value"
            }
        }

这将自动为您关闭编写器

【讨论】:

    【解决方案2】:

    添加writer.close() 作为Writer 缓冲数据。

    最好将其添加到finally 块中:

    } catch (IOException ex) {
        ex.printStackTrace(System.err)
    } finally {
        writer.close();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 1970-01-01
      • 2019-08-26
      • 2020-12-19
      • 2016-09-24
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多