天天看點

[Scala檔案操作]----讀取和寫入字元

如果有以下情景,怎麼用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())
  }

}