File::createとwrite_allで元のデータは上書かれる。
例えば、元データが4行で、上書きデータが2行だった場合でも、上書き後は2行になる。
{"family":"john","first":"fox"} {"family":"adam","first":"can"} {"family":"john","first":"fox"} {"family":"adam","first":"can"}
use serde::{Serialize, Deserialize}; use std::path::Path; use std::fs::{File}; use std::io::{Write}; #[derive(Serialize, Deserialize, Clone, Debug)] struct Name { family: String, first: String, } #[tokio::main] async fn main() { let name1 = Name {family:"yamada".to_string(), first: "taro".to_string()}; let name2 = Name {family:"sato".to_string(), first: "kazuki".to_string()}; let mut vect: Vec<Name> = Vec::new(); vect.push(name1); vect.push(name2); let file_path = format!("./data/names.txt"); let mut file = File::create(file_path.clone()).unwrap(); for name in vect { let serialized: Vec<u8> = serde_json::to_vec(&name).unwrap(); file.write_all(&serialized).expect("write failed"); file.write_all(b"\n").expect("write failed"); } println!("done"); }
{"family":"yamada","first":"taro"} {"family":"sato","first":"kazuki"}
なるほどね!