龙空技术网

如何在 Rust 中读取和写入文件

硬核老王 297

前言:

眼前看官们对“java读写文本文件的基本步骤有哪些方法”大致比较关切,各位老铁们都需要知道一些“java读写文本文件的基本步骤有哪些方法”的相关资讯。那么小编也在网摘上网罗了一些对于“java读写文本文件的基本步骤有哪些方法””的相关知识,希望小伙伴们能喜欢,小伙伴们快快来了解一下吧!

跟随这个演示,学习如何在 Rust 中使用文件系统模块。

知道如何读写文件对各种用途都很有用。在 Rust 中,这项任务是通过标准库中的文件系统模块(std::fs)完成的。在这篇文章中,我将向你介绍如何使用这个模块。

为了演示这项任务,我准备了一些示例代码,也可以在 GitHub上找到。

准备工作

在使用 Rust 时,失败的函数会返回 Result类型。尤其是文件系统模块会返回专门的类型std::io::Result。有了这些知识,你可以从main函数中返回相同的类型:

fn  main ->  std::io::Result {/* ...code comes here... */

Rust 文件写入

在 Rust 中执行文件的 I/O 操作是相对容易的。写入文件可以简化为一行:

use  std::fs;fs::write("favorite_websites.txt", b"opensource.com")?;Ok()

使用错误传播操作符 (?),错误信息被传递到调用函数中,随后可以处理错误。由于main是调用栈中唯一的其他函数,如果写操作失败,错误信息将被传递到控制台输出。

fs::write函数的语法是非常先进的。第一个参数是文件路径,它必须是std::path:

ath 类型。第二个参数是内容,它实际上是一个字节切片([u8])。Rust 将传递的参数转换为正确的类型。幸运的是,这些类型基本上是下面的例子中所处理的唯一类型。

使用文件描述符类型 std::fs::File可以实现对写操作更简洁的访问:

let mut file = fs::File::create("favorite_websites.txt")?;file.write_all(b"opensource.com\n")?;Ok()

由于文件类型实现了 Write特性,所以可以使用相关的方法来写入文件。然而,create方法可以覆盖一个已经存在的文件。

为了获得对文件描述符的更多控制,必须使用 std::fs::OpenOptions类型。这提供了类似于其他语言中的打开模式:

let mut file = fs::OpenOptions::new                            .append(true)                            .open("favorite_websites.txt")?;                            file.write_all(b"sourceforge.net\n")?;

Rust 文件读取

适用于写的东西也适用于读。读取也可以通过简单的一行代码来完成:

let websites = fs::read_to_string("favorite_websites.txt")?;

以上一行读取文件的内容并返回一个字符串。除了读取字符串,还有 std::fs::read函数,如果文件包含二进制数据,该函数会将数据读成一个字节向量。

下一个例子显示了如何将文件的内容读入内存,随后逐行打印到控制台:

let file = fs::File:pen("favorite_websites.txt")?; let lines = io::BufReader::new(file).lines; for line in lines { if let Ok(_line) = line { println!(">>> {}", _line); } }

总结

如果你已经熟悉了其他编程语言,你可能已经注意到没有 close-函数(或类似的)来释放文件句柄。在 Rust 中,当相关变量超出作用域,文件句柄就会被释放。为了定义关闭行为,可以在文件表示的周围应用作用域({ })。我建议你熟悉Read和Write特性,因为你可以在许多其他类型中找到这个特性的实现。

via:

作者:Stephan Avenwedde选题:lkxed译者:geekpi校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出

标签: #java读写文本文件的基本步骤有哪些方法 #python字典怎么逐行打印