Rustlang语言逐行处理文件的基本方法

文件操做

需求:安全

将文件中的内容按行读取出来,而后对改行的数据进行处理,最后将处理后的行数据存放到新的文件中。函数

使用RUST来处理的方法以下。spa

首先引入须要的标准库:code

use std::io::prelude::*;

use std::fs::File;

use std::io::BufWriter;

use std::io::BufReader;

 

 

而后将处理函数放到一个main函数中,这是我处理小问题的习惯。blog

定义一个main函数,内存

fn man() {字符串

 

}编译器

将咱们的实现代码放到上述的花括号中,首先试一下读取一个文件,代码以下。it

use std::io::prelude::*;

use std::fs::File;

use std::io::BufWriter;

use std::io::BufReader;

 

fn main() {

    let file = File::open("./data.dat").unwrap();

    let mut fin = BufReader::new(file);

 

    let mut line = String::new();

    fin.read_line(&mut line).unwrap();

    println!("{}", line);

}

 

首先,经过标准库的File open一个文件,而后经过unwrap()得到文件。打开一个文件以后,再定义一个BufReader,用于读取文件的内容。读取的东西放到一个Stringline,而后经过fin.read_line()函数读取文件的一行。最后打印出来读取的内容,看看是否读取成功。内存管理

如今,咱们要读取文件的整个行,代码以下。

use std::io::prelude::*;

use std::fs::File;

use std::io::BufWriter;

use std::io::BufReader;

 

fn main() {

    let file = File::open("./data.dat").unwrap();

    let mut fin = BufReader::new(file);

 

    for line in fin.lines() {

        println!("{}", line.unwrap());

    }

}

  

这里,为了读取全部的行,RUSTBufReader提供了一个lines()函数,返回Lines迭代器,使用for来取出全部的行。须要注意的就是line须要经过upwrap()来释放出来,固然也能够采用别的更加安全的方法。

如今须要的就是将处理过的行line,存储到新的文件中,代码以下。

use std::io::prelude::*;

use std::fs::File;

use std::io::BufWriter;

use std::io::BufReader;

 

fn main() {

    let file = File::open("./data.dat").unwrap();

    let mut fin = BufReader::new(file);

    let file_new = File::create("./data_new.dat").unwrap();

    let mut fout = BufWriter::new(file_new);

 

    for line in fin.lines() {

        let new_line = ope_line(&line.unwrap());

        fout.write_all((new_line + "\n").as_bytes()); 

    }

    fout.flush();

}

 

fn ope_line(line: &String) -> String {

    line.clone()

}

 

咱们使用BufWriterwrite_all()方法很方便的将处理后的行输出了。

RUST有很强的内存管理,因此在处理数据的时候要当心,编译器很找出全部的关于内存的错误。

注意,若是处理的字符串中有中文,并且使用write_fmt()函数写文件的时候,格式化字符串时必定要用{},而不是{:?}

相关文章
相关标签/搜索