鲁春利的工作笔记好记性不如烂笔头



http://www.scala-lang.org/api/current/#scala.io.package


scala.io.Source封装了对文件的操作,而scala.io.StdIn用来接收控制台的数据。

1、scala.io.Source

fromFile(file: File)
fromURI(uri: URI)
fromURL(url: URL)

2、scala.io.StdIn

readLine/readInt/readFloat/readBoolean等


1、读取文件

import scala.io.Source;
if (args.length > 0) {
    for (line <- Source.fromFile(args(0)).getLines()) {
        println(line.length + "\t" + line);
    }
} else {
    Console.err.println("Please enter filename.");
}

    test.txt文件内容

One World
One Dream

    调用

G:\Hadoop\scala-SDK\source>scala printargs.scala test.txt
9       One World
9       One Dream

G:\Hadoop\scala-SDK\source>scala printargs.scala
Please enter filename.

    Scala引入包的方式和Java类似,也是通过import语句。文件相关的类定义在scala.io包中。 如果需要引入多个类,Scala使用 “_” 而非 “*”。


package com.gourd.file;

import scala.io.Source;
import java.net.ConnectException;
import java.io.File;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * 文件操作的辅助类
 */
class FileUtil {
  def readFromFile (path : String) = {
    val source = Source.fromFile(path);
    val file = source.getLines();  // 返回值为Iterator[String]
    file.foreach { line => println(line); }
    source.close();
  }
  
  def readFromUrl (url : String) = {
    try {
      val source = Source.fromURL(url);
      val file = source.getLines();  // 返回值为Iterator[String]
      file.foreach { line => println(line); }
      source.close();
    } catch {
      case ex : ConnectException => println("Url " + url + " is invalid.");
    }
  }
  
  def writeToFileWithJava () = {
    val pw = new PrintWriter(new File("E:\\测试数据\\" + System.currentTimeMillis() + ".txt"));
    for (i <- 1 to 10) pw.println(i);
    pw.flush();
    pw.close();
  }
  
  /**
   * Java风格的从控制台读取数据并打印
   */
  def writeToFileFromReadWithJava () = {
    print("Please Enter:");
    val br = new BufferedReader(new InputStreamReader(System.in));
    /**
     * 
     * 按照下属方式是可以正常读取并结束的,但是如果是我们平时熟悉的java方式的话:
     * while ((line = br.readLine()) != "bye") {......}则是有问题,IDE提示:
     * comparing values of types Unit and String using `!=' will always yield true
     */
    var line = br.readLine();
    while(line != "exit") {
      println("Receive from console : " + line);
      print("Please Enter:");
      line = br.readLine();
    }
    println("Exit.")
    br.close();
  }
  
  /**
   * Scala风格的从控制台读取数据并打印
   * scala.Console
   */
  def writeToFileFromReadWithScala () = {
    print("Please Enter:");
    var line = Console.readLine();
    while(line != "exit") {
      println("Receive from console : " + line);
      print("Please Enter:");
      line = Console.readLine();
    }
    println("Exit.")
  }
}

/**
 * @author lucl
 */
object FileUtilOps {
  def main (args : Array[String]) {
    // 从文件中读数据
    val fileUtil = new FileUtil;
    fileUtil.readFromFile("E:\\测试数据\\test.txt");
    
    // 从URL中读数据
    // fileUtil.readFromUrl("http://www.text.com");
    // fileUtil.readFromUrl("https://www.baidu.com");
    
    // 写数据到文本文件
    fileUtil.writeToFileWithJava();
    fileUtil.writeToFileFromReadWithJava();
    fileUtil.writeToFileFromReadWithScala();
  }
}