33.文件与 IO.rs

use std::fs;
use std::fs::File;
use std::fs::OpenOptions;
use std::io::prelude::*;
use std::io::stdin;

fn main() {
     //Rust 中主函数是个无参函数,环境参数需要开发者通过 std::env 模块取出
     let args = std::env::args();
     println!("{:?}", args);
     for arg in args {
          println!("{}", arg);
     }

     //std::io 模块提供了标准输入(可认为是命令行输入)
     let mut str_buf = String::new();
     stdin()
          .read_line(&mut str_buf)
          .expect("Failed to read line.");

     println!("Your input line is {}", str_buf);

     //文本文件的读取
     let text = fs::read_to_string("text.txt").unwrap();
     println!("{}", text);

     //读取的文件是二进制文件
     let content = fs::read("text.txt").unwrap();
     println!("{:?}", content);

     //以上两种方式是一次性读取,十分适合 Web 应用的开发。但是对于一些底层程序来说,传统的按流读取的方式依然是无法被取代的,
     //因为更多情况下文件的大小可能远超内存容量。
     //std::fs::File 的 open 方法是"只读"打开文件,并且没有配套的 close 方法,因为 Rust 编译器可以在文件不再被使用时自动关闭文件。
     let mut buffer = [0u8; 5];
     let mut file = fs::File::open("text.txt").unwrap();
     file.read(&mut buffer).unwrap();
     println!("{:?}", buffer);
     file.read(&mut buffer).unwrap();
     println!("{:?}", buffer);

     //文件写入
     //一次性写入,它会直接删除文件内容(无论文件多么大)。如果文件不存在就会创建文件。
     fs::write("text.txt", "FROM RUST PROGRAM").unwrap();

     //用流的方式写入文件内容,可以使用 std::fs::File 的 create 方法:
     let mut file = File::create("text.txt").unwrap(); //打开的文件一定存放在可变的变量中才能使用 File 的方法!
     file.write(b"FROM RUST PROGRAM").unwrap();

     //File 类中不存在 append 静态方法,但是我们可以使用 OpenOptions 来实现用特定方法打开文件:
     let mut file = OpenOptions::new().append(true).open("text.txt").unwrap();
     file.write(b" APPEND WORD").unwrap();

     //OpenOptions 是一个灵活的打开文件的方法,它可以设置打开权限,除append 权限以外还有 read 权限和 write 权限,如果我们想以读写权限打开一个文件可以这样写:
     let mut file = OpenOptions::new()
          .read(true)
          .write(true)
          .open("text.txt")
          .unwrap();
     file.write(b"COVER555555555").unwrap();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值