// 2. 编写一段程序,从文件中读取单词。用一个可变映射来清点每一个单词出现的频率。
def fn2_1():Unit = {
import java.nio.charset.CodingErrorAction
import scala.io.Codec
implicit val codec = Codec("UTF-8")
codec.onMalformedInput(CodingErrorAction.REPLACE)
codec.onUnmappableCharacter(CodingErrorAction.REPLACE)
val path = "F:\\desktop\\123.txt"
val sourceFile = scala.io.Source.fromFile(path)
val map = new scala.collection.mutable.HashMap[String,Int]()
try {
for(line<-sourceFile.getLines()) {
val arr = line.split("\\s+",-1)
arr.map(str=>{
val tmp = map.getOrElse(str,0)+1
map.addOne(str,tmp)
})
}
for((k,v)<-map) println(s"$k->$v")
} catch {
case ex:Exception => {
println("Exception: " + ex)
}
} finally {
sourceFile.close()
}
}
// 2. 编写一段程序,从文件中读取单词。用一个可变映射来清点每一个单词出现的频率。
// 读取文件方式2
def fn2_2():Unit = {
import java.nio.charset.CodingErrorAction
import java.nio.charset.Charset
val codec = "GBK"
val decoder = Charset.forName(codec).newDecoder()
.onMalformedInput(CodingErrorAction.IGNORE)
.onUnmappableCharacter(CodingErrorAction.REPLACE)
val path = "F:\\desktop\\123.txt"
val src = scala.io.Source.fromFile(path)(decoder)
try {
src.foreach(print)
} finally {
src.close()
}
}
// 读取文件方式3
def fn2_3():Unit = {
import java.io.BufferedReader
import java.io.FileInputStream
import java.io.InputStreamReader
import java.nio.charset.Charset
import java.nio.charset.CodingErrorAction
val codec = "UTF-8"
val decoder = Charset.forName(codec).newDecoder()
decoder.onMalformedInput(CodingErrorAction.REPLACE)
decoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
val path = "F:\\desktop\\123.txt"
val input = new FileInputStream(new File(path))
val reader = new InputStreamReader(input, decoder)
val bufferedReader = new BufferedReader(reader)
try {
var line = bufferedReader.readLine
while ( line != null ) {
// new String(oldstring.getBytes("ISO-8859-1"), "UTF-8")
// decoder.decode( java.nio.ByteBuffer.wrap(oldstring.getBytes("ISO-8859-1")) ).toString
println(line)
line = bufferedReader.readLine
}
} catch {
case e: Exception =>
e.printStackTrace()
} finally {
bufferedReader.close()
reader.close()
input.close()
}
}
//文件写入
object PrintWriterConfig {
import java.io.{BufferedWriter,FileOutputStream,OutputStreamWriter,PrintWriter}
def getWriter(path:String,coding:String="UTF-8",appending:Boolean=true):PrintWriter={
return new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path,appending), coding)))
}
}
val content:String = "...."
val filePrinter = PrintWriterConfig.getWriter(path)
filePrinter.println
filePrinter.println(content)
filePrinter.close()
// 二进制对象
import scala.beans.BeanProperty
class Person(@BeanProperty var id:Int,@BeanProperty var name:String) extends Serializable {}
object Person {
def apply(id: Int, name: String): Person = new Person(id,name)
}
val p1 = Person(1,"zhang")
val p2 = Person(2,"wang")
val p3 = Person(2,"li")
val content = Array(p1, p2, p3)
// 文件路径
val path = "..."
// 二进制文件写入
val out = new ObjectOutputStream(new FileOutputStream(path))
out.writeObject(all)
out.close()
// 二进制文件读取
val in = new ObjectInputStream(new FileInputStream(path))
val res = in.readObject().asInstanceOf[Array[Person]]
in.close()
// 将scala的Map[String,Any]转换为Java的Map(String,Object)
import scala.collection.JavaConverters._
val schema1:Array[String] = Array("id","name","telephone")
val row:Seq[Any] = Seq[Any](1,"xx","123")
schema.zip(row).toMap.mapValues(x=>x.asInstanceOf[AnyRef]).asJava
// 将Java List转换为Scala Seq
import scala.collection.JavaConverters._
public Seq<String> convertListToSeq(List<String> inputList) {
return JavaConverters.asScalaIteratorConverter(inputList.iterator()).asScala().toSeq();
}