ETL-scala-读取文件夹中所有csv文件的第二行数据,保存至新的文件

数据格式:
在这里插入图片描述

直接上代码:

object CSVSecLine {
  def main(args: Array[String]): Unit = {
    val fileNames: ListBuffer[String] = getFileName("H:\\csv")
    //遍历文件夹中所有文件名,读取其第二行数据,写入新的文件
    for (fileName <- fileNames) {
      val data: String = readCSVSecLine(fileName)
      println(data)
      writeNewCSV(data,"H:\\xxx\\all.csv")
    }
  }

  /**
    * 读取csv文件的第二行数据
    * @param path
    * @return
    */
  def  readCSVSecLine(path:String) : String = {
    val file = new File(path)
    val br = new BufferedReader(new FileReader(file))
    var line: String = br.readLine
    var firstsecline = ""
    var firstline = ""


    for(i <-1 to 2){
      firstline = firstsecline;
      firstsecline = line.trim();
      line = br.readLine();
    }
    br.close();

    firstsecline
  }

  /**
    * 将读取的数据写入新的文件
    * @param data
    * @param path
    */
  def writeNewCSV(data:String,path:String): Unit ={
    val out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path,true),"utf-8"))
    out.write(data)
    out.newLine()
    out.flush()
    out.close()
  }

  /**
    * 获取文件夹中的所有文件名
    * @param path
    * @return
    */
  def getFileName(path:String): ListBuffer[String] ={
    val file = new File(path)
    val fileNames:ListBuffer[String] = ListBuffer()
    if(file.isDirectory){
      val files: Array[File] = file.listFiles()
      for (file <- files) {
        if(file.isDirectory){
          System.out.println("目录:" + file.getPath)
          getFileName(file.getPath)
        }else{
          //println(file.getPath)
          fileNames += file.getPath
        }
      }
    }
    fileNames
  }
}

将文件中每行的最后一个引号和倒数第二个逗号剔除并写入新文件:

object DelLastYinHao {
  def main(args: Array[String]): Unit = {
    val file = new File("H:\\xxx\\all.csv")
    val br = new BufferedReader(new FileReader(file))
    val out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("H:\\xxx\\all1.csv",true),"utf-8"))

    while (br.readLine()!=null){
      val data = new StringBuilder(br.readLine())
      val data2: StringBuilder = data.replace(data.length-1,data.length,"")
      val data3: StringBuilder = data2.replace(data2.length-1,data2.length,"")
      out.write(data3.toString())
      out.newLine()
      out.flush()
    }
    br.close()
    out.close()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值