Scala-文件操作
Scala-文件操作
相关内容原文地址:
简书:SunnyMore:Scala文件操作详解
CSDN:残缺的孤独:Scala 文件读写及Scala控制台输入
CSDN:power0405hf:Scala 文件操作
博客园:飞末:scala2.11读取文件
一、遍历一个文件中的每一行
必须导入scala.io.Source类: import scala.io.Source
import scala.io.Source
val source = Source.fromFile("myfile.txt", "UTF-8")
val lineIterator = source.getLines
val lines1 =lineIterator.toArray
val lines2 = lineIterator.toBuffer
//将文件内容读成字符串
val lines = source.mkString
source.close
方法一: 使用Source.getLines返回的迭代器
val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
val lineIterator = source.getLines
for (line <- lineIterator) println(line)
println("读取本地文件:")
val localfile = Source.fromFile("D:\\ww\\test.txt","GBK") //中文乱码
for(line <- localfile.getLines()){
println(line)
}
localfile.close()
方法二: 将Source.getLines返回的迭代器,转换成数组
一个BufferedSource对象的getLines方法,只能调用一次,一次调用完之后,遍历了迭代器里所有的内容,就已经把文件里的内容读取完了
如果反复调用source.getLines,是获取不到内容的
此时,必须重新创建一个BufferedSource对象
val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
val lines = source.getLines.toArray
for(line <- lines) println(line)
方法三: 调用Source.mkString,返回文本中所有的内容
val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
val lines = source.mkString
二、遍历一个文件中的每一个字符
使用完BufferedSource对象之后,调用BufferedSource.close方法,关闭IO流资源。
BufferedSource,也实现了一个Iterator[Char]的这么一个trait。
val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
for(c <- source) print(c)
三、从URL以及字符串中读取字符
val source = Source.fromURL("http://www.baidu.com", "UTF-8")
val source = Source.fromString("Hello World")
四、结合Java IO流,读取任意文件
spark的源码是由scala和java共同编写而成的,Java的多线程
scala,本身的编程语言的功能,就不是特别的强大和完善,比如说,scala甚至不能很方便地写文件,必须依赖于java的io流才可以
所以说,scala,其实主要就是针对某些特定领域的一些复杂系统的,比较适用的一种编程语言而已
完全无法替代java的,scala和java是相辅相成,荣辱与共的这么一种,共生关系
案例: 结合java IO流,做一个文件拷贝的案例
import java.io._
val fis = new FileInputStream(new File("C://Users//Administrator//Desktop//test.txt"))
val fos = new FileOutputStream(new File("C://Users//Administrator//Desktop//test3.txt"))
val buf = new Array[Byte](1024)
fis.read(buf)
fos.write(buf, 0, 1024)
fis.close()
fos.close()
4.1 结合Java IO流,写文件
val pw = new PrintWriter("C://Users//Administrator//Desktop//test4.txt")
pw.println("Hello World")
pw.close()
println("向文件中写数据:")
val writer = new PrintWriter(new File("test.txt")) //当前工程根目录下
for(i <- 1 to 100)
writer.println(i)
writer.close()
}
new FileWriter("/home/hadoop3/file/num1.txt",true)如果文件不存在,则会新建文件,true是在文件末尾追加写入,默认为false,从文件开头重新写,如果之前有内容,则会删除原有内容。
import java.io.FileWriter
println(Try{
val out = new FileWriter("/home/hadoop3/file/num1.txt",true)
for (i <- 0 to 15)
out.write(i.toString)
out.close()
})
4.2 递归遍历子目录
def getSubdirIterator(dir: File): Iterator[File] = {
val childDirs = dir.listFiles.filter(_.isDirectory)
childDirs.toIterator ++ childDirs.toIterator.flatMap(getSubdirIterator _)
}
val iterator = getSubdirIterator(new File("C://Users//Administrator//Desktop"))
for(d <- iterator) println(d)
访问目录:
import java.nio.file._
val dirname = "/home/cay/scala-impatient/code"
val entries = Files.walk(Paths.get(dirname)) // or Files.list
try {
entries.forEach(p => println(p))
} finally {
entries.close()
}
4.3 序列化以及反序列化(Java序列化和反序列化机制)
如果要序列化,那么就必须让类,有一个@SerialVersionUID,定义一个版本号
要让类继承一个Serializable trait。
@SerialVersionUID(42L) class Person(val name: String) extends Serializable
val leo = new Person("leo")
import java.io._
val oos = new ObjectOutputStream(new FileOutputStream("C://Users//Administrator//Desktop//test.obj"))
oos.writeObject(leo)
oos.close()
val ois = new ObjectInputStream(new FileInputStream("C://Users//Administrator//Desktop//test.obj"))
val restoredLeo = ois.readObject().asInstanceOf[Person]
restoredLeo.name
五、控制台输入
print("控制台输入,请输入:")
val content = Console.readLine() //2.11.0按照下面的方法
println(content)
print("控制台输入,请再次输入:")
val content1 = StdIn.readLine()
println(content1)
六、读取字符
val iter = source.buffered
while(iter.hasNext){
if(iter.next == '王'){
println("wang")
}else{
println("-")
}
}
import scala.io.Source
val source = Source.fromFile("myfile.txt", "UTF-8")
for (c <- source) 处理 c
//想查看某个字符但又不处理它的话,可以调用source对象的buffered方法
val source = Source.fromFile("myfile.txt", "UTF-8")
val iter = source.buffered
while (iter.hasNext){
if(iter.head 是符合预期的)
处理 iter.next
else ...
}
source.close()
七、读取词法单元或数字
val iter 2= source.mkString.split("\\s+")
val num = for(w <- iter2) yield w.toDouble
for(i <- num) println(i)
val tokens = source.mkString.split("\\s+")
val numbers = for(w <- tokens) yield w.toDouble
//或者
val numbers = tokens.map(_.toDouble)
八、从URL或其它资源读取
val source1 = Source.fromURL("http://baidu.com")//URL读取
val source2 = Source.fromString("hello")//读取给定的字符串-多用于调试
import scala.io.StdIn
val ms=StdIn.readLine()
九、读取二进制文件
import java.io.{File, FileInputStream}
val file = new File(" ")
val in = new FileInputStream(file)
val bytes = new Array[Byte](file.length.toInt)
in.read(bytes)
in.close()
十、RandomAccessFile
该对象特点:
1,该对象只能操作文件,所以构造函数接收两种类型的参数。
a.字符串路径。
b.File对象。
2,该对象既可以对文件进行读取,也可以写入。
在进行对象实例化时,必须要指定的该对象的操作模式,r rw等。
注意;该对象在实例化时,如果要操作的文件不存在,会自动建立。
如果要操作的文件存在,则不会建立。
如果存在的文件有数据,那么在没有指定指针位置的情况下,写入数据,会将文件开头的数据覆盖。
import java.io.RandomAccessFile
val randomFile = new RandomAccessFile("/home/hadoop3/file/num.txt","rw")
val fileLength = randomFile.length; //得到文件长度
randomFile.seek(fileLength);//指针指向文件末尾
for(i<- 'a' to 'g')
randomFile.writeBytes(i.toString);//写入数据
randomFile.close();
Scala-文件操作的更多相关文章
- Scala文件操作
Scala中的文件操作基本可以依赖于Java的实现,包括输入.输出流的使用. object FileOps {def main(args: Array[String]) { val file = So ...
- scala简单的文件操作
1.scala写入文件操作 package com.test import java.io.File import java.io.PrintWriter /** * scala文件写入 */ obj ...
- Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)
1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...
- Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
随机推荐
- nohup命令说明-转载
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangu ...
- Spring Cloud Sleuth链路监控应用(十四)
https://docs.spring.io/spring-cloud-sleuth/docs/2.2.5.RELEASE/reference/html/ 一.Sleuth介绍 为什么要使用微服务 ...
- 使用mono-repo实现跨项目组件共享
本文会分享一个我在实际工作中遇到的案例,从最开始的需求分析到项目搭建,以及最后落地的架构的整个过程.最终实现的效果是使用mono-repo实现了跨项目的组件共享.在本文中你可以看到: 从接到需求到深入 ...
- vue-cli3 创建项目路由缺失问题
1.在项目中新建一个router.js router.js import Vue from 'vue' import Router from 'vue-router' import Home from ...
- 人生苦短我用Python,本文助你快速入门
目录 前言 Python基础 注释 变量 数据类型 浮点型 复数类型 字符串 布尔类型 类型转换 输入与输出 运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 if.while.for 容器 列 ...
- LeetCode707 设计链表
设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一个属性 ...
- Docker haproxy应用构建 (五)
编写dockerfile from centos-base:v1 MAINTAINER 57674891@qq.com RUN mkdir -p /data/{soft,src,logs,script ...
- Redis 5 配置 Redis sentinel(哨兵模式)
先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: * 监控(Monitoring): Sentin ...
- oracle字符集与乱码(转)
作者:hcling97 http://blog.sina.com.cn/hcling97 2013年5月15日 转载请注明出处 字符集问题一直叫人头疼,究其原因还是不能完全明白其运作原理. 在整 ...
- 24v转3.3v稳压芯片,高效率DC-DC变换器3A输出电流
PW6206系列是一个高精度,高输入电压低静态电流,高速,低功耗降线性稳压器具有高纹波抑制.输入电压高达40V,负载电流为在VOUT=5V和VIN=7V时高达300mA.该设备采用BCD工艺制造.PW ...