Erlang用于操纵文件I/O的模块有:
file模块:打开、读、写、关闭文件已经操作目录的方法基本都在这里

filename模块:提供平台独立方式用于操纵文件名

filelib模块:file模块的扩展,提供了更多的实用工具,在file模块基础上构建

io模块:一系列用于操作打开的文件的方法,解析格式、格式化输出等等。

1.打开文件:
{ok,F}=file:open("data1.dat",read). %读模式打开
{ok,F}=file:open("data1.dat",write). %写模式
{ok,F}=file:open("data1.dat",[read,write]). %读、写、二进制模式

支持的所有模式参见文档。

2.读取:
(1)如果以一个Erlang term的方式读取,采用:
io:read(F,'').
其中第二个参数是提示符,用于在标准输入时作为提示。
这个方法有一个变形read/3
read(IoDevice, Prompt, StartLine)
第三个参数用于指定开始行数。

(2)如果是按字节读取,文件必须按raw模式打开采用:
{ok, Data}=file:read(F,100).

(3)按行读取:
io:get_line(F, '').

(4)读取整个文件的内容:
{ok,Binary}=file:read_file("data1.dat").
注意返回的是一个binary类型

(5)随机读取:
{ok,Binary}=file:pread(F, 22, 46).

其中第二个参数是开始位置,第三个参数是读取的长度,返回的也是binary类型。

3.写入文件:
(1)采用io:format/3方法:
{ok, S} = file:open("test2.dat", write).
io:format(S, "~s~n", ["Hello readers"]).
io:format(S, "~w~n", [123]).

其中的~开头的字符是一个个格式化命令,比如常见的:
~c   anscii码
~f   浮点数
~s   字符串
~w   Erlang term
~p   与~w类似,不过当多行时将自动换行
~n   显然,换行符

(2)写入整个文件:
file:write_file(File, IO)

其中IO可以为list、integer或者binary类型

(3)随机写入:
file:pwrite(F, 10, <<"new">>)

4.关闭文件:
file:close(F).

5.目录操作:
都是linux命令风格的操作,
cd("/home/dennis/").  %进入目录
file:list_dir(".").   %列出当前目录文件
file:make_dir("test").  %创建test目录
file:del_dir("test").   %删除test目录

6.获取文件信息,比如文件大小,最后修改时间等等。调用file:read_file_info/1方法,该方法返回一个file_info记录类型,里面拥有文件的具体信息,比如type、size等。
{ok, Facts} =file:read_file_info(File).
io:format("~s~n",{Facts#file_info.type, Facts#file_info.size}).

7.复制和删除文件:
file:copy(Source, Destination).
file:delete(File).

这个笔记仅仅记录了一些常用到的方法,一些高级的工具方法并没有涉及,具体参考Erlang的文档。

Erlang之IO编程的更多相关文章

  1. [转]PHP并发IO编程之路(深度长文)

    原文:https://www.imooc.com/article/8449 -------------------------------------------------------------- ...

  2. 面向对象的高级编程&IO编程

    1.给类对象绑定的函数,只对这个对象生效, 而对类绑定的对象, 所有的对象都可以调用. 栗子: def set_score(self, score): self.score = score s.set ...

  3. android 40 Io编程

    Io编程:内存卡和sd卡.字符串存入内存卡然后读出来. activity: package com.sxt.day06_06; import java.io.FileInputStream; impo ...

  4. Java IO编程全解(一)——Java的I/O演进之路

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7419117.html JDK1.4之前的早期版本,Java对I/O的支持并不完善,开发人员在开发高性能I/O ...

  5. Java IO编程全解(三)——伪异步IO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7723174.html 前面讲到:Java IO编程全解(二)--传统的BIO编程 为了解决同步阻塞I/O面临 ...

  6. Java IO编程全解(六)——4种I/O的对比与选型

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7804185.html 前面讲到:Java IO编程全解(五)--AIO编程 为了防止由于对一些技术概念和术语 ...

  7. Java IO编程全解(五)——AIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7794151.html 前面讲到:Java IO编程全解(四)--NIO编程 NIO2.0引入了新的异步通道的 ...

  8. day4 liaoxuefeng---面向对象编程、IO编程

    一.面向对象编程 二.面向对象高级编程 三.IO编程

  9. Java IO编程全解(四)——NIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...

随机推荐

  1. shapefile文件

    基本信息编辑 ESRI公司的Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式. 内容编辑 一个Shapefile文件最少包括三个文件: 主文件(*.shp).-- ...

  2. 扎克伯格谈Facebook创业过程

    第一课:Facebook的产品研发 (1)不仅注重用户体验,更关注程序本身对社会和产品的是否有益,进而对产品做出调整 (2)以学校为标准作为群组来划分,就是对产品进行了思考后决定的,不管是直觉决定还是 ...

  3. tcpprep 对IPV6的支持

    在采用tcpreplay对包实施回放前,需要对包执行预处理,tcpprep就是完成这个任务的.tcpprep要做的处理就是生成一个cache文件,根据tcpprep wiki的介绍http://tcp ...

  4. 读书笔记 (二) ———Fundamentals of Multiagent Systems with NetLogo Examples by Prof. Jose M Vidal

    chapter 2 分布式约束1 分布式约束满足 1.1 过滤算法 1.2 基于归结的调和算法 consistency 1.3 异步回溯 1.4 异步弱承诺? 1.5 分布式突破?2 分布式受限优化 ...

  5. jQuery.serializeArray() 函数详解

    serializeArray()函数用于序列化一组表单元素,将表单内容编码为一个JavaScript数组. serializeArray()函数常用于将表单内容序列化为JSON对象,以便于被编码为JS ...

  6. PAT-乙级-1027. 打印沙漏(20)

    1027. 打印沙漏(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求你写个程序把给定的符号打印成 ...

  7. textarea中限制输入字符长度

    要在textarea中限制输入字符的长度,比如在twitter中要限制字符为140个,可实现的方法有: 1. <textarea name="A" cols="45 ...

  8. WCF 在VS中,添加服务引用,地址输入http://ip/Service.svc,点击前往,提示错误,内容如下:

    WCF的service端的webconfig如下: <?xml version="1.0"?> <configuration> <system.ser ...

  9. 【无聊放个模板系列】POJ 3678 2-SAT

    #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...

  10. mybatis传入map参数parameterType

    基本数据类型:包含int,String,Date等.基本数据类型作为传参,只能传入一个.通过#{参数名} 即可获取传入的值 复杂数据类型:包含JAVA实体类.Map.通过#{属性名}或#{map的Ke ...