Erlang之IO编程

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的文档。
文章转自庄周梦蝶  ,原文发布时间2007-09-27

时间: 2025-01-26 09:38:47

Erlang之IO编程的相关文章

《Python爬虫开发与项目实战》——1.3 IO编程

1.3 IO编程 IO在计算机中指的是Input/Output,也就是输入输出.凡是用到数据交换的地方,都会涉及IO编程,例如磁盘.网络的数据传输.在IO编程中,Stream(流)是一种重要的概念,分为输入流(Input Stream)和输出流(Output Stream).我们可以把流理解为一个水管,数据相当于水管中的水,但是只能单向流动,所以数据传输过程中需要架设两个水管,一个负责输入,一个负责输出,这样读写就可以实现同步.本节主要讲解磁盘IO操作,网络IO操作放到之后的1.5节进行讨论.1

Erlang IO编程之文件目录操作常用方法小结_Erlang

Erlang用于操纵文件I/O的模块有: file模块:打开.读.写.关闭文件已经操作目录的方法基本都在这里 filename模块:提供平台独立方式用于操纵文件名 filelib模块:file模块的扩展,提供了更多的实用工具,在file模块基础上构建 io模块:一系列用于操作打开的文件的方法,解析格式.格式化输出等等. 1.打开文件: 复制代码 代码如下: {ok,F}=file:open("data1.dat",read). %读模式打开 {ok,F}=file:open("

erlang otp-erlang 服务器端编程 错误提示 variable &amp;amp;#39;State&amp;amp;#39; is unbound

问题描述 erlang 服务器端编程 错误提示 variable 'State' is unbound -module(gen_server_template). %% gen_server_template -behaviour(gen_server). -export([start_link/0]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/

Java -网络IO编程

转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢!     本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解.     下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端.     代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就能更容易理解,代码中会用到一个计算结果的工具类,见文章代码部分.     相关的基础知识文章推荐:     Linux

《Netty 权威指南》—— 伪异步IO编程

声明:本文是<Netty 权威指南>的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文. 为了解决同步阻塞IO面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远远大于N,通过线程池可以灵活的调配线程资源,设置线程的最大值,防止由于海量并发接入导致线程耗尽. 下面,我们结合连接模型图和源码,对伪异步IO进行分析,看它是否能够解决同步阻塞IO面临的问题.

Java IO编程

Java IO Java NIO 详解(一) Java NIO 详解(二) 本列表会不断更新

Erlang的一些编程技巧分享_Erlang

guard guard可以以逗号或者分号分隔,以逗号分隔表示最终的结果为各个guard的and结果,以分号则是只要任意一个guard为true则最终结果为true. 复制代码 代码如下: guard(X, Y) when not(X>Y), is_atom(X) ->     X + Y. guard在list comprehension中可以筛选元素: 复制代码 代码如下: NewNodes  = [Node || Node <- AllNodes, not gb_sets:is_me

Java编程那些事儿85——IO类体系

11.2 I/O类体系 在JDK API中,基础的IO类都位于java.io包,而新实现的IO类则位于一系列以java.nio开头的包名中,这里首先介绍java.io包中类的体系结构. 按照前面的说明,流是有方向的,则整个流的结构按照流的方向可以划分为两类: 1.输入流: 该类流将外部数据源的数据转换为流,程序通过读取该类流中的数据,完成对于外部数据源中数据的读入. 2.输出流: 该类流完成将流中的数据转换到对应的数据源中,程序通过向该类流中写入数据,完成将数据写入到对应的外部数据源中. 而在实

Java编程那些事儿84——IO简介

第十一章 I/O处理 I/O(Input/Output)是输入和输出的简称,在Java语言中所有和输入输出有关的都属于IO处理技术,例如包含文件的读写和网络数据的发送等. 其实整个计算机实现功能时最主要的就是IO,用户使用鼠标.键盘等输入设备向程序输入数据,程序进行一定的逻辑处理,然后再将处理结果以一定的形式显示到显示器等输出设备上. I/O处理技术是Java语言中实现文件操作.内存操作.控制台输入以及网络编程的基础,但是由于I/O技术本身的设计原因,也使得I/O处理技术的难度比较大,需要花费比