Elixir 从零 · 第 19 课(展开目录)
01 · 先让代码说话02 · 先认六种值03 · 把值装起来04 · 从旧 list 生成新 list05 · 让形状对上06 · 用 case 做选择07 · 把文字安全变成整数08 · 拆开 &1 和管道09 · 把代码放进项目10 · 真假不只靠 true11 · 走进嵌套数据12 · 一字不一定一字节13 · 让函数按形状接活14 · 把一列数收成一个值15 · 给不同问题选不同路16 · 给 map 一张名片17 · 让项目自己验答案18 · 让成功和失败长得一样19 · 读写文件先管好路20 · 只算眼前需要的21 · 同一句话,不同做法22 · 先约好模块会做什么23 · 把数据形状写在门口24 · 测试不只看一条好路25 · 把项目磨成一个命令26 · 定下小项目边界27 · 把真实文字洗干净28 · 只开三扇门29 · 把约定钉在代码旁30 · 打包,也留下脚印31 · 照任务书交卷
ELIXIR · 进阶 · LESSON 1935 分钟

读写文件先管好路

用 `Path` 拼路径,用 `File` 返回值处理磁盘成功与失败。

01 · 先看完整例子

在临时目录写一张短名单

这段代码只写系统临时目录里的指定文件。

Elixir
path = Path.join(System.tmp_dir!(), "beam_path_names.txt")

# 写入自己控制的临时文件
:ok = File.write(path, "阿青
小满
")

# 文件读取可能失败,所以先匹配成功结果
{:ok, text} = File.read(path)
String.split(text, "
", trim: true)
先对照结果
  • 最后得到 ["阿青", "小满"]。
02 · 回头拆代码

从第一行往下读

  1. System.tmp_dir!/0 取得当前系统临时目录。
  2. :ok = 说明本例要求写入成功,否则立刻暴露问题。
  3. 读回文字后再由 String.split/3 解析。
03 · 认清新符号

符号不是暗号

Path.join/2

安全拼接目录和文件名。

File.write/2

写文件,成功返回 :ok。

File.read/1

读文件,返回 success/error tuple。

04 · 代码里的概念

把名字和意思对上

01

路径

指出文件在磁盘上的位置。不同系统的分隔方式可能不同。

02

文件边界

程序与磁盘交接的位置;文件可能不存在、无权限或正在被占用。

05 · 再说清楚

这些写法为什么有用

文件代码有两个边界:路径和磁盘。路径不要靠手写斜杠拼接,读写不要假装永远成功。

Path.join/2 会按当前系统拼路径。File.write/2 与 File.read/1 返回结果 tuple。

练习使用系统临时目录,避免覆盖自己的文件。真正项目还要考虑权限、编码和大文件。

06 · 自己改一次

合上答案,动手

把文件名改为 scores.txt,写入 "8\n9\n"。

练习起点
path = Path.join(System.tmp_dir!(), ____)
File.write(path, ____)

目标结果: 返回 :ok,临时文件中有两行数字。

卡住了,再看提示

两个空分别是文件名与含换行符的字符串。

运行过以后,再看一种答案
一种答案
path = Path.join(System.tmp_dir!(), "scores.txt")
# 
 表示换行
File.write(path, "8
9
")
想一想:为什么路径不直接写成 `"/tmp/scores.txt"`?

不同系统的临时目录与路径规则不同;由系统和 Path 模块决定更稳妥。

带走

记住三句

  1. 1

    路径交给 Path 模块拼接。

  2. 2

    磁盘操作总有失败可能。

  3. 3

    先读取原始文字,再单独解析。

本课结束代码也跑过一次,就把这一课收好。