面试题答案
一键面试use std::fs::File;
use std::io::{self, BufRead, BufReader};
struct FileLineReader {
reader: BufReader<File>,
}
impl FileLineReader {
fn new(path: &str) -> Result<Self, io::Error> {
let file = File::open(path)?;
let reader = BufReader::new(file);
Ok(FileLineReader { reader })
}
}
impl Iterator for FileLineReader {
type Item = Result<String, io::Error>;
fn next(&mut self) -> Option<Self::Item> {
let mut line = String::new();
match self.reader.read_line(&mut line) {
Ok(0) => None,
Ok(_) => Some(Ok(line)),
Err(e) => Some(Err(e)),
}
}
}
使用示例:
fn main() {
let file_path = "example.txt";
let mut reader = FileLineReader::new(file_path).unwrap();
while let Some(result) = reader.next() {
match result {
Ok(line) => println!("Line: {}", line.trim()),
Err(e) => eprintln!("Error: {}", e),
}
}
}