ZetCode

Rust 文件读取

最后修改于 2025 年 2 月 19 日

在本文中,我们将介绍如何在 Rust 中读取文件。

Rust 有几种读取文件的方法,包括使用 std::fs::Filestd::io::Read trait。

read_to_string 函数

read_to_string 函数将整个文件读取到一个 String 中。

main.rs
use std::fs::File;
use std::io::Read;

fn main() {

    let filename = "words.txt";

    let mut file = match File::open(filename) {
        Ok(file) => file,
        Err(err) => panic!("Could not open file: {}", err),
    };

    let mut contents = String::new();

    match file.read_to_string(&mut contents) {
        Ok(_) => println!("File contents: {}", contents),
        Err(err) => panic!("Could not read file: {}", err),
    }
}

在此示例中,我们使用 File::open 函数打开一个名为 words.txt 的文件,并使用 read_to_string 函数将其内容读取到一个字符串中。

使用 BufReader

在 Rust 中读取文件的另一种方法是使用 std::io 模块中的 BufReader 类型。

main.rs
use std::fs::File;
use std::io::{BufRead, BufReader};

fn main() {

    let filename = "words.txt";

    let file = match File::open(filename) {
        Ok(file) => file,
        Err(err) => panic!("Could not open file: {}", err),
    };

    let reader = BufReader::new(file);

    for line in reader.lines() {
        match line {
            Ok(line) => println!("{}", line),
            Err(err) => panic!("Could not read line: {}", err),
        }
    }
}

在此示例中,我们打开一个文件并创建一个 BufReader 实例,以便逐行读取文件。

read_to_end 函数

read_to_end 函数将读取源中直到 EOF 的所有字节,并将它们放入一个缓冲区。

main.rs
use std::fs::File;
use std::io::{self, Read};

fn main() -> io::Result<()> {
    let filename = "words.txt";

    let mut f = File::open(filename)?;
    let mut buffer = Vec::new();

    f.read_to_end(&mut buffer)?;
    let content = String::from_utf8_lossy(&buffer);

    println!("{}", content);

    Ok(())
}

在此示例中,我们定义一个缓冲区,并使用 read_to_end 将整个文件读取到缓冲区中。之后,我们将缓冲区转换为字符串并打印到控制台。

let mut buffer = Vec::new();

我们定义一个缓冲区。

f.read_to_end(&mut buffer)?;

我们将整个文件读取到一个缓冲区中。

let content = String::from_utf8_lossy(&buffer);

我们将缓冲区转换为字符串。

在本文中,我们介绍了 Rust 文件读取的基础知识。我们演示了如何使用 std::fs::Filestd::io::Read trait 打开和读取文件,以及如何处理过程中可能发生的错误。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Rust 教程