`

[笔记]erlang文件操作

 
阅读更多

erlang关于文件操作的模块还是很多的

stdlib下有filelib filename和file_sorter 

核心模块有file 当然io的一些导出函数也可以用来对文件进行读写

 

这里简要记下笔记

 

首先是filelib

9> ls().
doc                  factorial.beam       factorial.erl
fibo.beam            fibo.erl             head_test.hrl
iotest.beam          iotest.erl           message.beam
message.erl          procedure.beam       procedure.erl
recode_test.beam     recode_test.erl      show_ip.beam
show_ip.erl          \x{6D4B}\x{8BD5}.txt
ok
10> filelib:ensure_dir("doc").
ok
11> filelib:ensure_dir("cc").
ok

 文档中解释是返回ok代表在在所有的父目录中存在或可以创建这个以输入为文件名的文件或者文件夹

 错误的话返回{error, Reason}代表不存在也不能被创建

 

 file_size/1 返回对应文件的字节数

 is_dir/1 返回是否是目录

 is_file/1 返回是否是文件(非目录)

 is_regular 返回是否是正常文件(?)

 last_modified/1 返回对应文件最后修改时间

 wildcard 显示匹配通配符的文件的文件名

 这些使用起来都很简单 就写一个例子:

 

33> filelib:fold_files(".",".*.erl",false,fun(Name,X) -> io:format("~20s ~p ~p ~p ~n",[Name,filelib:file_size(Name),filelib:last_modified(Name),fil
elib:is_file(Name)]) end,0).
     ./factorial.erl 84 {{2013,6,22},{23,46,56}} true
          ./fibo.erl 195 {{2013,6,22},{22,59,39}} true
        ./iotest.erl 140 {{2013,6,23},{0,36,29}} true
       ./message.erl 805 {{2013,6,23},{15,45,51}} true
     ./procedure.erl 383 {{2013,6,25},{19,17,27}} true
   ./recode_test.erl 180 {{2013,7,1},{12,53,22}} true
       ./show_ip.erl 180 {{2013,6,28},{15,18,35}} true
ok

 

以上代码对中文支持不行(不会显示中文 会打出string的list 所以那个~20s应该换为~p比较合适) 不会打印出文件夹(要全部打印可以通过wildcard匹配*之类的完成)

文件夹的is_file/1返回的也是true 而不是false 要判断直接用is_dir/1

 

 

filename的doc里密密麻麻都是例子我就懒得自己动手了...

 

 

file模块的操作不怎么麻烦

举几个例子:

 

文件夹建立删除:

59> file:del_dir("cc").
ok
60> file:make_dir("cc").
ok

 

读取文件:

可以用read_file/1 指定一下文件路径和文件名一口气读完 也可以用read/2 用read/2之前要对文件进行open操作获得IoDevice:

64> {ok,File}=file:open("fibo.erl",[raw,read]).
{ok,{file_descriptor,prim_file,{#Port<0.538>,728}}}
65> {ok,Data}=file:read(File,filelib:file_size("fibo.erl")).
{ok,"-module(fibo).\r\n-export([fibo/1]).\r\n\r\n%% fibo(1) -> 1;\r\n%% fibo(2) -> 1;\r\n%% fibo(N) ->  fibo(N-1)+fibo(N-2).\r\n\r\nfibo(N) when N>
0 ->\r\n case N of\r\n   1 ->1;\r\n   2 ->1;\r\n   _ ->fibo(N-1)+(N-2) end."}
66> Data.
"-module(fibo).\r\n-export([fibo/1]).\r\n\r\n%% fibo(1) -> 1;\r\n%% fibo(2) -> 1;\r\n%% fibo(N) ->  fibo(N-1)+fibo(N-2).\r\n\r\nfibo(N) when N>0 ->
\r\n case N of\r\n   1 ->1;\r\n   2 ->1;\r\n   _ ->fibo(N-1)+(N-2) end."

 当然用完关一下..file:close(File).

 

 写文件也一样简单:

70> {ok,File}=file:open("fibo.erl",[append]).
{ok,<0.121.0>}
71> file.write(File,<<"hello 你好")>).
* 1: syntax error before: '.'
71> file:write(File,<<"hello 你好")>).
* 1: syntax error before: ')'
71> file:write(File,<<"hello 你好">>).
ok
72> file:close(File).
ok

 注意open的参数有很多 这边不一一列举 file模块很多操作都和平台有关.

这边还有一个方便使用的read_line/1函数:

77> file:read_line(File).
{ok,"-module(fibo).\n"}
78> file:read_line(File).
{ok,"-export([fibo/1]).\n"}
79> file:read_line(File).
{ok,"\n"}
80> file:read_line(File).
{ok,"%% fibo(1) -> 1;\n"}
81> file:read_line(File).
{ok,"%% fibo(2) -> 1;\n"}
82> file:read_line(File).
{ok,"%% fibo(N) ->  fibo(N-1)+fibo(N-2).\n"}
83> file:read_line(File).
{ok,"\n"}
84> file:read_line(File).
{ok,"fibo(N) when N>0 ->\n"}
85> file:read_line(File).
{ok," case N of\n"}
86> file:read_line(File).
{ok,"   1 ->1;\n"}
87> file:read_line(File).
{ok,"   2 ->1;\n"}
88> file:read_line(File).
{ok,"   _ ->fibo(N-1)+(N-2) end."}
89> file:read_line(File).
eof
90> file:read_line(File).
eof

 不太友好返回了个\n可以用正则处理掉 \\n$

 

分享到:
评论

相关推荐

    erlang 学习笔记1

    在Erlang中,文件操作是通过标准库中的file模块进行的。例如,`file:open/2`用于打开文件,`file:write/2`用于写入数据,而`file:read/1`用于读取文件内容。此外,Erlang的并发特性使得在多个进程间并发读写文件成为...

    erlang 笔记

    文件与路径操作 - **路径操作**: 使用`cd`命令改变当前工作目录,如:`1&gt; cd("e:/erlang_src").` - **打印当前路径**: 使用`pwd()`函数可以打印当前的工作目录。 #### 7. 高级函数定义与操作 - **高阶函数**: ...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Groovy与Java高度互操作,可以在现有的Java项目中无缝集成。Groovy的优点在于它支持闭包和元编程,使得代码更加简洁和可扩展。 Stackless Python是一种Python的变体,它强调微线程(microthreads)的使用,提供更...

    RabbitMQ笔记.pdf

    RabbitMQ使用AMQP协议来确保消息中间件的互操作性,并提供可靠的消息传递模式。RabbitMQ通过Exchange、Queue、Binding等组件实现消息的路由和分发,保障消息的可靠传递。AMQP协议为RabbitMQ提供了丰富的消息特性和...

    rabbitmq centos7 安装笔记 亲测成功安装.docx

    请注意,上述步骤中的URL、版本号和路径可能会随时间变化,因此在实际操作时,应检查Erlang和RabbitMQ的最新官方文档以获取准确信息。此外,确保系统的软件源是最新的,并遵循最佳安全实践,例如限制对管理界面的...

    rabbitmq学习笔记.zip

    RabbitMQ是一个开源的消息...总的来说,这个“rabbitmq学习笔记.zip”文件应该为初学者提供了一个全面了解和掌握RabbitMQ的资源,从基础概念到实践操作,再到高级特性和最佳实践,帮助读者建立起对RabbitMQ的深入理解。

    cent7离线源码安装rabbitmq3.7.8集群-详细笔记文档-带安装包

    以下是一份详细的步骤指南,包括所需文件、配置和操作。 **1. 获取源码和依赖包** 首先,你需要下载RabbitMQ 3.7.8的源码包和所有必要的依赖。这通常包括Erlang OTP(RabbitMQ的基础运行环境)。可以从官方网站下载...

    SubEthaEdit-5.1.3.zip 可以写文章,代码,笔记

    无论他们在哪里,都可以写文章,代码,笔记或与朋友见面。极限编程会议,辅导和创意写作的理想选择。 强大的编辑 细颗粒还原 可以按照您的方式执行撤消操作,而不必将太多的编辑分组在一起。 块编辑 同时在多行...

    NoSQL笔记.doc

    - NoSQL数据库通常不支持复杂的SQL查询,尤其是多表关联查询,而是鼓励使用简单的查询操作,如键值对存储、文档数据库和图形数据库等,它们更适合单表查询和简单条件分页。 7. **多样性与选择**: - NoSQL数据库...

    redis整理笔记

    根据给定的文件信息,以下是对“redis整理笔记”中涉及的关键知识点的详细解析: ### Redis简介 **Redis**(Remote Dictionary Server)是一种开源的、高性能的键值存储系统,支持多种数据结构如字符串(String)...

    笔记本电脑安装:Fabriquartz,这是笔记本电脑的默认安装

    Elixir是一种基于Erlang虚拟机的函数式编程语言,因其并发性和容错性而受到青睐,常用于构建高可用性的分布式系统。在笔记本电脑上安装Elixir,我们需要下载并安装其安装程序,同时可能还需要安装其依赖的BEAM虚拟机...

    sample-elasticsearch-demo

    10. **源代码与配置**:"sample-elasticsearch-demo-master"可能包含配置文件(如elasticsearch.yml)、脚本(用于数据导入)和其他辅助文件,这些资源可以帮助开发者学习如何设置和操作Elasticsearch与Dendron的...

    mongodb官网文档集合

    MongoDB是一款开源的、高性能的、基于分布式文件存储的数据库系统。它被设计为易于扩展和使用,支持多种编程语言,适用于处理大规模数据集。MongoDB的核心优势在于其灵活的数据模型,允许存储结构化和非结构化的数据...

    Walter3semestre

    2. **教程文档**:可能是 PDF 文件或 Markdown 文档,详细解释了 Elixir 的核心概念,如元编程、管道操作符(|&gt;)、模式匹配、函数式数据结构(如列表、映射和元组)等。 3. **测试文件**:Elixir 采用 BDD(行为...

Global site tag (gtag.js) - Google Analytics