对文件编程
库的组织结构:
1.file模块:在这个模块中包含了用于文件的打开,关闭,读取,写入和目录列表等功能的函数。
2.filename:此模块以平台独立的方式提供了一套操纵文件名的函数。可以达到在不同的操作系统中执行相同的操作。
3.filelib:这个模块是file模块的的扩展,提供了一套辅助函数用于生成文件列表、校验文件类型等操作。
4.io模块:这个模块提供了一系列对已经打开的文件进行操作的函数,这个模块中的函数可以用于对文件中数据的解析以及向文件中写入格式化的数据。
data1.dat
{person, "joe","armstrong",
[{occupation,programmer},
{favoriteLanguage,erlang}]}.
{cat, {name,"zorro"},
{owner,"joe"}}.
从文件中读取所有的Erlang数据项:
file:consult(File)会假定File指定的文件中包含了一串Erlang的数据项,如果可以读取其中的所有数据项,就会返回{ok,[Term]};否则会返回{error,Reason}。
从文件的数据项中一次读取一项:
在上图使用如下命令:
@spec file:open(File,read) => {ok,IoDevice} ! error,Why}
这个函数尝试以只读方式打开文件。如果它能打开该文件,则返回ok,IoDevice};否则
就返回{error,Reason}。IoDevice是一个用于访问文件的IO设备。
@spec io:read(IoDevice,Prompt) => [ok,Term] error,Why} eof
从IoDevice里面读取Erlang数据项。如果IoDevice指定的是一个已打开文件,那么Prompt
参数会被忽略。如果我们使用io:read来从标准输入读取,Prompt只用来提供一个提示符。
@spec file:close(IoDevice) => ok ferror,Why}
关闭IoDevice。
从文件中一次读取一行数据:
io:get_line能够一次从文件中读取一行数据。io:get_line会不断的读取字符串,直到遇到一个行尾符或者文档结束符。