Scala进阶之路-I/O流操作之文件处理

                               作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  说起Scala语言操作文件对象其实是很简单的,大部分代码和Java相同。

一.使用Scala拷贝文件实现

  1 /*
  2 @author :yinzhengjie
  3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
  4 EMAIL:y1053419035@qq.com
  5 */
  6 package cn.org.yinzhengjie.file
  7
  8 import java.io._
  9
 10 object FileDemo {
 11     /**
 12       * 定义读取文件的方法
 13       */
 14     def readFile(filePath:String): Unit ={
 15         val f = new File(filePath)
 16         val fis = new FileInputStream(f)
 17         val buf = new BufferedReader(new InputStreamReader(fis))
 18         var line = "";
 19         /**
 20           *     我这里定义一个标志位,判断文件是否读取完毕,不建议使用break,不仅仅是因为它需要导报,而是因为它是以抛异常的
 21           * 方式结束了整个程序!这一点我真的想吐槽Scala啦!比起Python,Java,Golang,Scala是没有continue和break关键字的!
 22           */
 23         var flag:Boolean= true
 24         while (flag){
 25             line = buf.readLine()
 26             //注意,Scala在读取文件时,如果读到最后会返回一个null值,因此,此时我们将标志位改为false,以便下一次结束while循环
 27             if (line == null){
 28                 flag = false
 29             }else{
 30                 println(line)
 31             }
 32         }
 33         buf.close()
 34         fis.close()
 35     }
 36
 37     /**
 38       * 拷贝文本文件
 39       */
 40     def copyFile(Input:String)(OutPut:String): Unit ={
 41         val input = new File(Input)
 42         val output = new File(OutPut)
 43         val fis = new FileInputStream(input)
 44         val fos = new FileOutputStream(output)
 45         val buf = new BufferedReader(new InputStreamReader(fis))
 46         val cache = new BufferedWriter(new OutputStreamWriter(fos))
 47         var line = "";
 48         var flag:Boolean= true
 49         while (flag){
 50             line = buf.readLine()
 51             if (line == null){
 52                 flag = false
 53             }else{
 54                 cache.write(line)
 55                 cache.write("\r\n")
 56                 cache.flush()
 57             }
 58         }
 59         cache.close()
 60         fos.close()
 61         fis.close()
 62         println("拷贝完毕")
 63     }
 64
 65
 66     /**
 67       * 拷贝任意类型文件,包括二进制文件
 68       */
 69     def copyFile2(Input:String)(OutPut:String): Unit ={
 70         val fis = new FileInputStream(Input)
 71         val fos = new FileOutputStream(OutPut)
 72         //定义缓冲区
 73         val buf = new Array[Byte](1024)
 74         var len = 0
 75
 76         /**
 77           * 注意:len = fis.read(buf)是一个赋值操作,这个赋值操作是没有任何的返回值的哟!因此我们需要返回len的值。
 78           */
 79         while ({len = fis.read(buf);len} != -1){
 80             fos.write(buf,0,len)
 81         }
 82         fos.close()
 83         fis.close()
 84         println("拷贝完毕")
 85     }
 86
 87     def main(args: Array[String]): Unit = {
 88         var input = "D:\\BigData\\JavaSE\\yinzhengjieData\\1.java"
 89         var output = "D:\\BigData\\JavaSE\\yinzhengjieData\\2.java"
 90 //        readFile(input)
 91         copyFile2(input)(output)
 92     }
 93 }
 94
 95
 96
 97
 98 /*
 99 以上代码输出结果如下 :
100 拷贝完毕
101  */

二.读取用户的输出

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.file
 7
 8 import scala.io.StdIn
 9
10 object ConsoleDemo {
11     def main(args: Array[String]): Unit = {
12         //控制台交互--老API
13         print("请输入内容:")
14         val consoleLine1 = Console.readLine()
15         println("老API输入的内容是:" + consoleLine1)
16
17         //控制台交互--新API
18         print("请输入内容(新API):")
19         val consoleLine2 = StdIn.readLine()
20         println("新API输入的内容是:" + consoleLine2)
21     }
22 }

  以上代码执行结果如下:

三.Scala文件处理常用方法

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.file
 7
 8 object SourceDemo {
 9     def main(args: Array[String]): Unit = {
10         var input = "D:\\BigData\\JavaSE\\yinzhengjieData\\1.java"
11         val f = scala.io.Source.fromFile(input)
12         println(f)
13
14         /**
15           *  迭代打印文件中的每行内容
16           */
17 //        val it = f.getLines()
18 //        for(x <- it){
19 //            println(x)
20 //        }
21
22         /**
23           * 读取整个文件串
24           */
25         println(f.mkString)
26
27         /**
28           * 迭代每个字符
29           */
30 //        for(c <- f){
31 //            print(c)
32 //        }
33
34         /**
35           * 使用正则 s:空白符 S:非空白符
36           *     所谓的空白符就是指:空格,制表符,换行符等等
37           */
38 //        val arr = f.mkString.split("\\s+")
39 //        for(a <- arr){
40 //            println(a)
41 //        }
42
43     }
44 }

  使用Scala爬取网页,在网上找了一些写的都长篇大论,属实懒得看,爬虫的话建议还是用Java或者Python去写,Java爬取网页的笔记可参考:https://www.cnblogs.com/yinzhengjie/p/9366013.html。

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 package cn.org.yinzhengjie.file
 7
 8 import java.io.FileOutputStream
 9
10 object ReptilianDemo {
11
12     def copyFile(Input:String)(OutPut:String): Unit ={
13         val fos = new FileOutputStream(OutPut)
14         fos.write(Input.getBytes())
15         println("拷贝完毕")
16     }
17
18     def main(args: Array[String]): Unit = {
19         /**
20           * Scala的fromURL方法我是不推荐使用的,因为爬去的内容不完全,需要设置相应的参数,建议用java代码或者Python去爬取
21           *     可参考:https://www.cnblogs.com/yinzhengjie/p/9366013.html
22           */
23         val res = scala.io.Source.fromURL("https://www.cnblogs.com/yinzhengjie")
24         val html = res.mkString
25         println(html)
26         var output = "D:\\BigData\\JavaSE\\yinzhengjieData\\尹正杰.html"
27         copyFile(html)(output)
28
29     }
30 }

  访问成功的话,在控制端会打印如下信息:

Scala进阶之路-I/O流操作之文件处理相关推荐

  1. Scala进阶之路-面向对象编程之类的成员详解

    Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...

  2. Scala进阶之路-正则表达式案例

    Scala进阶之路-正则表达式案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 废话不多说,正则大家都很清楚,那在Scala如何使用正则了?我们直接上个案例,如下: 1 /* 2 ...

  3. Scala进阶之路-并发编程模型Akka入门篇

    Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...

  4. Java之文件流操作的文件读写

    Java之文件流操作的文件读写 本人非常喜欢Java的代码风格,今天记录一下文件字符串的读写,但是Java对于 制作exe文件非常不友好,而本人业务的要求,基本上都是制作exe文件,或者程序,Java ...

  5. Android进阶之路 - 软键盘中右下角的设置与监听

    在项目中,多多少少会遇到修改软键盘右下角按钮的需求,虽然已经写过几次,但是还是觉得在这里专心做个笔记比较放心 ~ 我的那些软键盘Blog ~ Android进阶之路 - 常见软键盘操作行为 Andro ...

  6. 【Delphi入门】文件系统(文件分类 文件文本变量 文件操作 文件流操作)

    文件分类 文本文件(TextFile) & 二进制文件(Flie) 二进制形式存放数据占有存储空间较少,但不直观:文本文件与之相反 文件是由相同类型的数据元素组成的序列.在DELPHI中对文件 ...

  7. 今天,公司架构师跟我分享多年的私货 | 进阶之路必读书籍(附下载链接)

    HTML与CSS 初级 <Head First HTML与CSS(第2版)>豆瓣评分:9.3 入门经典,初始获得信息的好途径.帮助读者逐步构件小的知识点,再结合一本整体的类别逻辑型的书,就 ...

  8. 25 scala 进阶

    文章目录 scala 进阶 1.高阶函数 1.1 函数作为参数的函数 1.2 匿名函数 1.3 高阶函数 1.4 高阶函数作为方法的返回类型 1.5 参数类型推断 1.6 闭包与柯里化 2.scala ...

  9. 大数据编程语言 Scala 进阶篇

    作者:幻好 来源: 恒生LIGHT云社区 Scala 系列: 2小时速学大数据编程语言 Scala 秘籍 大数据编程语言 Scala 进阶篇 前言 为了能够深入学习大数据框架 Spark 和 Fink ...

  10. 2023最新软件测试学习思维导图(从小白到大师进阶之路)

    如下是我工作之余熬夜整理的软件测试学习思维导图,通过回顾多年的从业经验,总结提炼出来的一些东西,希望能对大家有些帮助,特别是刚入门软件测试行业或将要加入软件测试行业的同学,可以认真看一下,可以作为参考 ...

最新文章

  1. 在asp.net中如何管理cache
  2. VB.Net to C Sharp Converter有用吗?
  3. PIE SDK影像坏线修复
  4. java jsonobject转List_java – 将JSONObject转换为List或JSONArray的简单代码?
  5. CRM/PLM/SCM/MES与ERP的联系与区别
  6. native封装卡片 react_自己动手封装一个React Native多级联动
  7. Hibernate基本概念 (4)
  8. UVA-11536 Smallest Sub-Array
  9. 归并排序——java
  10. 在Shell中,“$“和““的作用
  11. Zephyr调整Main栈大小
  12. 我的信念 -居里夫人
  13. excel取消按颜色排序_在Excel中按颜色排序
  14. halcon之屌炸天的自标定
  15. python下一代工作流引擎_几大工作流引擎对比
  16. 2021年美容师(初级)最新解析及美容师(初级)模拟考试题
  17. C语言如何计算数组的长度
  18. FreeRTOS学习笔记【二】——FreeRTOS 移植
  19. Mavenir研究表明,向融合5G Packet Core迁移可将总拥有成本降低多达36%
  20. 一:Grafana-graph面板用法

热门文章

  1. 出师表 / 前出师表 作者:诸葛亮
  2. 用Python实现BP神经网络(附代码)
  3. 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式...
  4. 记录一次苏宁电商延保服务的体验
  5. 游戏组件——Game类
  6. 基于ASP.NETAJAX的WebPart开发与部署-转
  7. 2019.02.12 bzoj3944: Sum(杜教筛)
  8. ifconfig源码分析之与内核交互数据
  9. 网络爬虫的基本原理(一)
  10. jQuery选择器【学习】