如果有以下情景,怎麼用scala實作讀寫檔案?
1、實作讀取以下檔案内容
E:/device_level
"E:/test.txt"
實作如下:
package com.ngaa.scala.test
import java.io.{ByteArrayInputStream, File, FileInputStream, InputStream}
import scala.io.BufferedSource
/**
* Created by jfei_yang on 20170705.
* Update date:
* Time: 10:50
* Project: sparkmvn
* Package: com.ngaa.scala.test
* Describle : 測試scala讀寫檔案操作
*
* Result of Test: 測試通過
* Command:
*
*
* Email: [email protected]
* Status:線上正在使用
* Machine ip:
* ^^叢集----->192.168.1.1(001業務統計)
* ^^叢集----->127.0.0.1 (002業務統計)
*
* Attention:
*
*
*/
object TestNgaaUtils {
def main(args: Array[String]) {
val str="http://stat-y.xywy.com/vclick.png?Type=visit&Url=http%3A%2F%2Fm.so.xywy.com%2Fcomse.php%3Fsrc%3D3gclubso%26keyword%3D%25E5%259B%259B%25E5%258D%2581%25E5%2587%25A0%25E5%25B2%2581%25E7%2594%25B7%25E4%25BA%25BA%25E5%25BF%2583%2\n5E7%2590%2586&Domain=m.so.xywy.com&ClientId=1499086455712135328943326&ClientVisitNumber=7&ClientVisitNumberDay=7&SessionId=149908645571212102385&SessionNumber=7&LoginId=&UserType=&UrlKeyWord=%E5%9B%9B%E5%8D%81%E5%87%A0%E5%B2%81%E7%94%B7%E4%BA%BA%E5%BF%83%E7%90%86&TypeId\n=zhao&XPoint=15&YPoint=172&Height=80&Width=330&ItemId=m_detail_circles&Href=&TagName=DIV&Text=&Params=t%3Dmagicube%26n%3Dm_detail_circles%26p%3D1%26w%3D%E5%85%B6%E4%BB%96%E7%96%BE%E7%97%85%E5%9C%88&RandomNum=0.23594240844249725&RefKeyWord=&Redomain=3g.club.xywy.com&Ref=\nhttp%3A%2F%2F3g.club.xywy.com%2Fstatic%2F20140610%2F45407765.htm"
//從檔案中讀取字元串
val json=inputToString(new FileInputStream ("E:/device_level"))
//将字元串寫入檔案
inputToFile(str2InputStream(str),new File("E:/test.txt"))
println(json)
}
//可以從InputStream中讀取檔案字元串
def inputToString(is: java.io.InputStream): String = {
val lines: Iterator[String] = scala.io.Source.fromInputStream(is, "utf-8").getLines()
val sb = new StringBuilder()
lines.foreach(sb.append(_))
sb.toString()
}
//将輸入流寫入檔案(test.txt)中
//參數f---> val file = new File("F:/test.txt")
def inputToFile(is: java.io.InputStream, f: java.io.File) {
val in: BufferedSource = scala.io.Source.fromInputStream(is)
val out = new java.io.PrintWriter(f)
try {
in.getLines().foreach(out.print(_))//等價write,隻是多了一句if(s==null)s="null"
}
finally {
out.close
}
}
/**
* string to inputStream
* @param str
* @return
*/
def str2InputStream(str:String):InputStream={
new ByteArrayInputStream(str.getBytes())
}
}