一、txt文件
c#中主要可以通过以下三种方式进行读写操作,注意都需要引入System.IO命名空间
1.使用File类读写文件
1 //读取文件,把每一个行文本读取成一个字符串,返回一个字符串的数组 2 string[] array = File.ReadAllLines(“文本路径”) 3 //通过字符串数组形式写入文件 4 File.WriteAllLines("文本路径",new string[]{"第一行的内容","第二行的内容","第三行的内容"}) 5 6 7 //读取文件,把所有文本读取成一个字符串并返回 8 string s = File.ReadAllText(“文本路径”) 9 //通过字符串形式写入文件 10 File.WriteAllText("文本路径", "xx xxxx") 11 string s = ss; 12 13 //读取文件,该方法可以读取每个字节 故可以处理所有类型的文件 14 byte[] byteArray = File.ReadAllBytes("文件路径") 15 //通过给定字节数组写入文件 16 File.WriteAllBytes("文件路径", byteArray)
2.使用FileStream读写文件
public enum FileMode { //创建一个新的文件如果该文件已存在会引发异常。 CreateNew = 1, //创建一个新的文件如果该文件已存在会覆盖它 Create = 2, //打开现有文件 Open = 3, //打开一个文件,如果不存在创建一个新的文件 OpenOrCreate = 4 } //将文件1数据读到文件2 FileStream readStream = new FileStream("文件路径1", FileMode.Open) FileStream writeStream = new FileStream("文件路径2", FileMode.Create) //在while循环中持续从原始文件读取字节块并存入缓存数组中,再从缓存数组读到目标文件中 byte[] data = new byte[count] while (true) { int length = stream.Read(data, 0, data.Length); if (length == 0) { //读取结束 break; } else { for (int i = 0; i < length; i++) { Console.Write(data[i] + " "); } writeStream.Write(data, 0, length) } } //NOTE : 最后别忘了把流关闭,(浪费可耻=。=) writeStream.Close() readStream.Close()
3.使用StreamReader和StreamWriter读写文件
//创建文本读取流 StreamReader reader = new StreamReader("文本路径") //我要一次读一行 while(true) { string str = reader.ReadLine() if (str == null) break Console.WriteLine(str) } //我一次性读完(我全都要) string str = reader.ReadToEnd() Console.WriteLine(str) //我要一个字符一个字符读 while(true) { int res = reader.Read() if (res == -1){ break; } else { Console.Write((char)res); } } //NOTE : 勿忘我 reader.Close() //创建文本写入流,如果该文件存在会被覆盖 StreamWriter reader = new StreamWriter("文本路径") while(true) { string s = Console.ReadLine() if (s == "q") break; //写入一个字符串 writer.Write(s) //写入一个字符串并换行 writer.WriteLine(s) } //NOTE : 勿忘我 writer.Close()
二、xml文件
可扩展标记语言,被设计用来传输和存储数据。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <root> 3 <student stuId="9527"> 4 <name>XiaoMing</name> 5 <age>18</age> 6 <sex>1</sex> 7 </student> 8 <student stuId="9528"> 9 <name>XiaoFang</name> 10 <age>25</age> 11 <sex>0</sex> 12 </student> 13 <student stuId="9529"> 14 <name>XiaoMai</name> 15 <age>20</age> 16 <sex>1</sex> 17 </student> 18 </root>
在解析如上的xml文件之前先要介绍几个概念:
XmlNode:Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点,都可以用XmlNode来表示。如<xxx></xxx>
XmlElement:继承自XmlNode,专指元素节点。XmlElement拥有众多对Attribute的操作方法,可以方便的对其属性进行读写操作(XmlNode也可以通过Attributes属性获取属性列表)
操作步骤:
//1.load xml文件 XmlDocument doc = new XmlDocument() doc.Load("文件路径") //2.先取到root节点 XmlNode node = doc.SelectSingleNode("root") //3.获取root下student的集合 XmlNodeList nodeList = node.ChildNodes //4.遍历student集合 for (int i = 0; i < nodeList.Count; i++) { if(nodeList[i].Attributes["stuId"].Value == "9527"){ //例如找到stuId为9527的元素节点,继续遍历下面的属性 foreach (XmlElement e in nodeList[i].ChildNodes) { switch(e.name){ case "name": //e.InnerText即为XiaoMing break; case "age": //e.InnerText即为18 break; case "sex": //e.InnerText即为1 break; } } } } //其他常用API //1.可以得到student元素集合 doc.GetElementsByTagName("student")
NOTE:解析时一般会根据xml格式创建一个对应的数据类文件,然后将读取到的xml数据信息写进数据类中
三、json文件
Json(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)
这里我们使用litjson进行解析json文本,首先需要去litjson的网站下载litjson.dll 然后添加引用
操作步骤:
//json文件的txt [ {"id":10001,"damage":100,"name":"飞龙在天"}, {"id":10002,"damage":120,"name":"隔山打牛" }, ] //对应格式的数据类 public class Skill { public int id; public int damage; public string name; }
using LitJson; List<Skill> skillList = new List<Skill>() //1.使用JsonData对象去解析 JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("xxx")); foreach (JsonData temp in jsonData) { Skill skill = new Skill(); JsonData id = temp["id"]; JsonData name = temp["name"]; JsonData damage = temp["damage"]; skill.id = Int32.Parse(id.ToString()); skill.damage = Int32.Parse(damage.ToString()); skill.name = name.ToString(); skillList.Add(skill); } //2.使用泛型去解析json, 定义的类字段或者属性需要和json格式保持一致 //当json文件中只有一个数据项时: Skill skill = JsonMapper.ToObject<Skill>(File.ReadAllText("文件路径")); //当json文件中多个数据项时: Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("文件路径")); List<Skill> skillList = JsonMapper.ToObject<List<Skill>>(File.ReadAllText("文件路径")); //3.从数据类转换到json格式 Skill s = new Skill(10001, 100, "飞龙在天"); string json = JsonMapper.ToJson(s); File.WriteAllText(json)