1、逐行读文本



use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;

fn main() {
// File hosts must exist in current path before this produces output
if let Ok(lines) = read_lines("./hosts") {
// Consumes the iterator, returns an (Optional) String
for line in lines {
if let Ok(ip) = line {
println!("{}", ip);
}
}
}
}

// The output is wrapped in a Result to allow matching on errors
// Returns an Iterator to the Reader of the lines of the file.
fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where P: AsRef<Path>, {
let file = File::open(filename)?;
Ok(io::BufReader::new(file).lines())
}


2 一次读入文本



use std::fs::File;
use std::io::prelude::*;
use std::path::Path;

fn main() {
// Create a path to the desired myfile
let path = Path::new("a.txt");
let display = path.display();

// Open the path in read-only mode, returns `io::Result<File>`
let mut myfile = match File::open(&path) {
Err(why) => panic!("couldn't open {}: {}", display, why),
Ok(myfile) => myfile,
};

// Read the myfile contents into a string, returns `io::Result<usize>`
let mut s = String::new();
match myfile.read_to_string(&mut s) {
Err(why) => panic!("couldn't read {}: {}", display, why),
Ok(_) => print!("{} contains:\n{}", display, s),
}

// `myfile` goes out of scope, and the "hello.txt" myfile gets closed
}


3  读取二进制文件 



use std::fs::File;
use std::env;
use std::io::prelude::*;
fn main() -> std::io::Result<()> {
let mut param=env::args();
if param.len() != 2{
Err(std::io::Error::new(std::io::ErrorKind::Other,"usage:bintool inputfile"))
}
else{
let _=param.next();
let inputfile=param.next();
let mut _inputfile = File::open(inputfile.unwrap())?;
//let mut _outputfile= File::create(outputfile.unwrap())?;
let mut buffer:[u8;16]=[0;16];
while let std::io::Result::Ok(len) = _inputfile.read(&mut buffer){
//println!("{}",len);
if len == 0 {
break;
}
else{
for i in 0..len{
//_outputfile.write_fmt(format_args!("{:#02x} ",buffer[i]));
print!("{:02x} ",buffer[i]);
}println!("\r\n");
}
}
Ok(())
}
}