scala导出UTF-8的CSV文件用Excel打开乱码

去掉BOM:\uFEFF

避免出现科学计数法:在 数据前或者后面加上“\t”


def exportFiles(title: String, subTitles: String, selectCondition: String, content: List[List[String]]) = {
    var fileName = "fail"
    try {
      val exportFile = new File(s"$LocalFilePath/$title($selectCondition)_${formatTimStamp()}.csv")
      if (!exportFile.getParentFile.exists())
        exportFile.getParentFile.mkdirs
      if (!exportFile.exists())
        exportFile.createNewFile
      log.info("exportFile Path:"+exportFile.getAbsoluteFile)
      log.info("exportFile Path:"+exportFile)
      val bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(exportFile), "UTF-8"))
      var count = 0
      bw.write("\uFEFF" + tackleSubtitles(subTitles))
      content.map {
        row => {
          val line = new StringBuffer()
          log.info("########data length===" + row.length)
          for (i <- 0 to row.length - 1) {
            if (i == row.length - 1) {
              /*if (row(i).equals("") || row(i) == "" || row(i) == "null" || row(i) == null)
                line.append("" + "\r\n")
              else*/
                line.append(Try(row(i).replace("--","")).getOrElse("") + "\t\r\n")
            } else {
              /*if (row(i).equals("") || row(i) == "" || row(i) == "null" || row(i) == null)
                line.append(row(i) + ",")
              else*/
              line.append(Try(row(i).replace("--","")).getOrElse("")  + "\t,")
            }
          }


          count += 1
          bw.write(line.toString)
          if (count % 100 == 0)
            bw.flush()
        }
      }
      bw.flush()
      bw.close()
      if (exportFile.exists && exportFile.length() > 0)
        fileName = exportFile.getName
    } catch {
      case e: Exception => {
        log.error(s"JdbcExport Error:${e}+++${e.getStackTrace}+++++${e.getStackTraceString}++++${e.printStackTrace()}")
      }
    }
    fileName
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值