[Scala]學習筆記六——讀取外部資料
阿新 • • 發佈:2018-11-12
1.讀取檔案及網路資料
object ReadFileApp extends App { val file=scala.io.Source.fromFile("E:\\data\\hello.txt") //讀取指定檔案 //一行一行讀取檔案 def readLine: Unit ={ for(line<-file.getLines()){ println(line) } } //一個字元一個字元的讀 def readChar: Unit ={ for(ele<-file){ println(ele) } } //讀取網路上的內容 def readNetwork: Unit ={ val file=scala.io.Source.fromURL("http://www.baidu.com") for(line<-file.getLines()){ println(line) } } readLine readChar readNetwork //讀取介面,自己還要看一下 }
2.讀取MySQL資料
首先,需要新增MySQL依賴
<!--引入mysql的依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
然後,連線資料庫讀取內容,很像java中jdbc
import java.sql.{Connection, DriverManager} object MySQLApp { def main(args: Array[String]): Unit = { val url="jdbc:mysql://localhost:3306/mysql" val user="root" val password="600619" var connection:Connection=null; try { classOf[com.mysql.jdbc.Driver] //分散式時需要用到這一句 connection=DriverManager.getConnection(url,user,password) val statement=connection.createStatement(); val resultSet=statement.executeQuery("select host,user from user;") //user這張表是mysql自帶的一張表 while(resultSet.next()){ val host=resultSet.getString("host") val user=resultSet.getString("user") println(s"$host $user") } }catch{ case e:Exception=>println("Error...") }finally{ if(connection==null){ connection.close() } } } }
3.讀取XML檔案
(1)獲取: 下面三種方式都可以讀取到xml檔案,xml檔案放在了main下的resource資料夾中
def loadXML: Unit ={ val xml=XML.load(this.getClass.getClassLoader.getResource("src/main/resource/test.xml")) println(xml) } def loadXML: Unit ={ val xml=XML.load(new FileInputStream("C:\\Users\\PYN\\IdeaProjects\\scalatrain\\src\\main\\resource\\test.xml")) println(xml) } def loadXML: Unit ={ val xml=XML.load(new InputStreamReader(new FileInputStream("C:\\Users\\PYN\\IdeaProjects\\scalatrain\\src\\main\\resource\\test.xml"))) println(xml) }
(2)讀取其中的內容:
//讀header下的field
val field=xml\"header"\"field"
println(field)
//讀取所有field
val fields=xml \\ "field"
for(field<-fields)
println(field)
//讀取header下的field中的name屬性
val names=(xml\"header"\"field"\\"@name")
for(name<-names)
println(name)
//讀取name="c" 的value
val value=(xml\\"value").filter(_.attribute("name").exists(_.text.equals("c")))
println(value)
//獲取header下的field
(xml\"header"\"field").map(x=>(x\"@name",x.text,x\"@age")).foreach(println)