1-scala文件操作--读写,序列化-阿里云开发者社区

开发者社区> 开发与运维> 正文

1-scala文件操作--读写,序列化

简介:

scala文件读写,序列化

import java.io._
import java.nio.file._
import scala.io.Source

object HelloWorld extends App {

  println("打印所有的子目录")
  implicit def makeFileVisitor(f: (Path) => Unit) = new SimpleFileVisitor[Path] {
    override def visitFile(p: Path, attrs: attribute.BasicFileAttributes) = {
      f(p)
      FileVisitResult.CONTINUE
    }
  }

  val dir: File = new File("D:/scalawork")
  Files.walkFileTree(dir.toPath, (f: Path) => println(f))

  println("打印所有的文件")
  def subdirs(dir: File): Iterator[File] = {
    val children = dir.listFiles.filter(_.isDirectory)
    children.toIterator ++ children.toIterator.flatMap(subdirs _)
  }

  subdirs(new File("D:/scalawork")).foreach { println _ }

  println("写文件")
  val out = new PrintWriter("numbers.txt")
  for (i <- 1 to 100) out.println(i)
  // use string format
  val quantity = 100
  val price = .1
  out.print("%6d %10.2f".format(quantity, price))
  out.close()

  println("读文件")
  val lines = Source.fromFile("numbers.txt").getLines()
  lines.foreach { println _ }

  println("读取二进制文件")
  class Student(val name: Stringval sex: Shortval addr: Stringextends Serializable {
    override def toString(): String = {
      "name:%s,sex:%d,addr:%s".format(name, sex, addr)
    }
  }
  val studentA = new Student("张三"2"广州")
  val studentB = new Student("李四"2"广州")
  val outObj = new ObjectOutputStream(new FileOutputStream("student.obj"))
  outObj.writeObject(studentA)
  outObj.writeObject(studentB)
  outObj.close()
  val in = new ObjectInputStream(new FileInputStream("student.obj"))
  println(in.readObject().asInstanceOf[Student])
  println(in.readObject().asInstanceOf[Student])
  
  //读取二进制文件
    var in = NoneOption[FileInputStream]
  var out = NoneOption[FileOutputStream]
  try {
    in = Some(new FileInputStream("/tmp/Test.class"))
    out = Some(new FileOutputStream("/tmp/Test.class.copy"))
    var c = 0
    while ({ c = in.get.read; c != -1 }) {
      out.get.write(c)
    }
  } catch {
    case e: IOException => e.printStackTrace
  } finally {
    println("entered finally ...")
    if (in.isDefined) in.get.close
    if (out.isDefined) out.get.close
  }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章