- Elixir 教程
- Elixir - 首页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 运算符
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 字符串
- Elixir - 字符列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 映射
- Elixir - 模块
- Elixir - 别名
- Elixir - 函数
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举
- Elixir - 流
- Elixir - 结构体
- Elixir - 协议
- Elixir - 文件 I/O
- Elixir - 进程
- Elixir - 符号
- Elixir - 推导式
- Elixir - 类型说明
- Elixir - 行为
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 库
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用资源
- Elixir - 讨论
Elixir - 文件 I/O
文件 I/O 是任何编程语言不可或缺的一部分,因为它允许语言与文件系统上的文件交互。在本章中,我们将讨论两个模块 - Path 和 File。
Path 模块
path 模块是一个非常小的模块,可以被认为是文件系统操作的辅助模块。File 模块中的大多数函数都期望路径作为参数。最常见的是,这些路径将是常规二进制文件。Path 模块提供了处理此类路径的功能。建议使用 Path 模块中的函数,而不是仅仅操作二进制文件,因为 Path 模块透明地处理不同的操作系统。需要注意的是,Elixir 在执行文件操作时会自动将斜杠 (/) 转换为反斜杠 (\)(在 Windows 上)。
让我们考虑以下示例来进一步了解 Path 模块:
IO.puts(Path.join("foo", "bar"))
当运行以上程序时,它会产生以下结果:
foo/bar
path 模块提供了许多方法。您可以查看不同的方法 此处。如果您正在执行许多文件操作,则经常使用这些方法。
File 模块
file 模块包含允许我们将文件打开为 IO 设备的函数。默认情况下,文件以二进制模式打开,这要求开发人员使用 IO 模块中的特定 IO.binread 和 IO.binwrite 函数。让我们创建一个名为 newfile 的文件并向其中写入一些数据。
{:ok, file} = File.read("newfile", [:write]) # Pattern matching to store returned stream IO.binwrite(file, "This will be written to the file")
如果您去打开我们刚刚写入的文件,内容将以以下方式显示:
This will be written to the file
现在让我们了解如何使用 file 模块。
打开文件
要打开文件,我们可以使用以下 2 个函数中的任何一个:
{:ok, file} = File.open("newfile") file = File.open!("newfile")
现在让我们了解 File.open 函数和 File.open!() 函数之间的区别。
File.open 函数始终返回一个元组。如果文件成功打开,它会将元组中的第一个值返回为 :ok,第二个值是 io_device 类型的字面量。如果发生错误,它将返回一个元组,第一个值为 :error,第二个值为原因。
另一方面,File.open!() 函数如果文件成功打开则会返回一个 io_device,否则会引发错误。注意:这是我们将要讨论的所有 file 模块函数中遵循的模式。
我们还可以指定要以何种模式打开此文件。要以只读模式和 utf-8 编码模式打开文件,我们使用以下代码:
file = File.open!("newfile", [:read, :utf8])
写入文件
我们有两种方法可以写入文件。让我们看看第一个使用 File 模块中的 write 函数。
File.write("newfile", "Hello")
但是,如果您对同一个文件进行多次写入,则不应使用此方法。每次调用此函数时,都会打开一个文件描述符并生成一个新进程来写入文件。如果您在循环中进行多次写入,请通过 File.open 打开文件,并使用 IO 模块中的方法写入文件。让我们考虑一个示例来理解相同的内容:
#Open the file in read, write and utf8 modes. file = File.open!("newfile_2", [:read, :utf8, :write]) #Write to this "io_device" using standard IO functions IO.puts(file, "Random text")
您可以使用其他 IO 模块方法(如 IO.write 和 IO.binwrite)写入以 io_device 打开的文件。
从文件读取
我们有两种方法可以从文件读取。让我们看看第一个使用 File 模块中的 read 函数。
IO.puts(File.read("newfile"))
运行此代码时,您应该获得一个元组,其第一个元素为 :ok,第二个元素为 newfile 的内容。
我们还可以使用 File.read! 函数来获取返回给我们的文件内容。
关闭打开的文件
每当您使用 File.open 函数打开文件后,在完成使用后,都应使用 File.close 函数关闭它:
File.close(file)