9. Scala操作外部數據 文件讀取,xml,Excel,MySQL


文件讀取

讀取本地文件,讀取csv文件,讀取網絡文件

package com.yy.scala

import scala.io.Source

/**
 * 文件讀取
 */
object FileApp extends App {

  val file = Source.fromFile("D:\\data\\hello.txt")
  //按行讀取
  for(line <- file.getLines()){
    println(line)
  }

  //按字符讀取
  for(char <- file){
    println(char)
  }

  //按行讀取CSV文件
  val csvFile = Source.fromFile("D:\\data\\test.csv")
  val csvList = csvFile.getLines().toList
  val title = csvList.max
  println("title: "+title)
  val titleArr = title.split(",")
  for(i <- 1 until csvList.size){
    val line = csvList(i)
    val lineList: Array[String] = line.split(",")
    for(i <- 0 until lineList.length){
      print(titleArr(i)+":" + lineList(i) + " ")
    }
    println
  }

  //讀取網絡文件
  var netFile = Source.fromURL("https://www.baidu.com")
  for(line <- netFile.getLines()){
    println(line)
  }

}

讀取xml文件

pom.xml中引入scala-xml工具包

<dependency>
  <groupId>org.scala-lang.modules</groupId>
  <artifactId>scala-xml_2.11</artifactId>
  <version>1.2.0</version>
</dependency>

讀取xml文件代碼如下

package com.yy.scala

import java.io.{FileInputStream, InputStreamReader}

import scala.xml.XML

object XmlApp extends App {

  //讀取XML 項目src/main/resources路徑下
  val xml1 = XML.load(this.getClass.getClassLoader.getResource("test.xml"))
  println(xml1)
  //讀取XML 絕對路徑
  val xml2 = XML.load(new FileInputStream("D:\\data\\test.xml"))
  print(xml2)
  val xml3 = XML.load(new InputStreamReader(new FileInputStream("D:\\data\\test.xml")))
  print(xml3)

  val xml = XML.load(this.getClass.getClassLoader.getResource("test2.xml"))
  //讀取header下的filed
  val headerField = xml \ "header" \ "field"
  println(headerField)

  //讀取所有的field
  val fields = xml \\ "field"
  for (field <- fields) {
    println(field)
  }

  //讀取header下field的所有name
  //val filedAttributes = (xml \ "header" \ "field").map(_ \ "@name")
  val filedAttributes = (xml \ "header" \ "field" \\ "@name")
  for (filedAttribute <- filedAttributes) {
    println(filedAttribute)
  }

  //讀取name=Logon的message
  //val filters = (xml \\ "message").filter(_.attribute("name").exists(_.text.equals("Logon")))
  val filters = (xml \\ "message").filter(x => ((x \ "@name").text).equals("Logon"))
  for (filter <- filters) {
    println(filter)
  }

  //讀取header下field的所有name的值,field的值,required的值
  (xml \ "header" \ "field").map(x => (x \ "@name", x.text, x \ "@required")) .foreach(println)

}

讀取Excel文件

這里使用的是poi工具類,在pom.xml中引入

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>4.1.0</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>4.1.0</version>
</dependency>

讀取Excel文件代碼如下

package com.yy.scala

import java.io.FileInputStream

import org.apache.poi.xssf.usermodel.XSSFWorkbook

/**
 * poi讀取Excel
 */
object ExcelApp extends App {

  val filePath = "E:\\data\\test.xlsx"
  val fs = new FileInputStream(filePath)
  val xssfWorkbook: XSSFWorkbook = new XSSFWorkbook(fs)
  for(i <- 0 until xssfWorkbook.getNumberOfSheets){
    //獲取表格每一個sheet
    val xssfSheet = xssfWorkbook.getSheetAt(i)
    val titleRow = xssfSheet.getRow(0)
    for(row <- 1 to xssfSheet.getLastRowNum()){
      //獲取表格每一行
      val xssfRow = xssfSheet.getRow(row)
      for(i <- 0 until xssfRow.getPhysicalNumberOfCells){
        //獲取表格每一行的每一列
        val title = titleRow.getCell(i).toString
        val value = xssfRow.getCell(i).toString
        print(title + ":" +value+" " )
      }
      println
    }
  }

}

連接MySQL數據庫

在pom.xml中引入MySQL驅動包

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.15</version>
</dependency>

連接MySQL讀取mysql庫user表代碼如下

package com.yy.scala

import java.sql.{Connection, DriverManager, ResultSet, Statement}

object MySQLApp extends App {
  val url = "jdbc:mysql://127.0.0.1:3306/mysql?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai"
  val username = "root"
  val password = "123456"
  var connection: Connection = null
  var statement:Statement = null
  var resultSet:ResultSet = null
  try {
    classOf[com.mysql.cj.jdbc.Driver]
    //獲取連接
    connection = DriverManager.getConnection(url, username, password)
    statement = connection.createStatement()
    resultSet = statement.executeQuery("select host, user from user")
    while (resultSet.next()) {
      val host = resultSet.getString("host")
      val user = resultSet.getString("user")
      println(s"host:$host, user:$user")
    }
  } catch {
    case e: Exception => println(e)
  } finally {
    // 釋放資源
    if(resultSet != null){
      resultSet.close()
    }
    if(statement != null){
      statement.close()
    }
    if(connection != null){
      connection.close()
    }
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM