c#中txt/xml/json文件的读写操作


一、txt文件

c#中主要可以通过以下三种方式进行读写操作,注意都需要引入System.IO命名空间

1.使用File类读写文件

//读取文件,把每一个行文本读取成一个字符串,返回一个字符串的数组
string[] array = File.ReadAllLines(“文本路径”) //通过字符串数组形式写入文件
File.WriteAllLines("文本路径",new string[]{"第一行的内容","第二行的内容","第三行的内容"}) //读取文件,把所有文本读取成一个字符串并返回
string s = File.ReadAllText(“文本路径”) //通过字符串形式写入文件
File.WriteAllText("文本路径", "xx xxxx") //读取文件,该方法可以读取每个字节 故可以处理所有类型的文件
byte[] byteArray = File.ReadAllBytes("文件路径") //通过给定字节数组写入文件
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 = readStream.Read(data, 0, data.Length);//将流数据读入data数组
if (length == 0) { //读取结束
        break; } else { for (int i = 0; i < length; i++) { Console.Write(data[i] + " "); } writeStream.Write(data, 0, length) } } //NOTE : 最后别忘了把流关闭,(浪费可耻=。=)
readStream.Close() writeStream.Close()

3.使用StreamReader和StreamWriter读写文件

//1.创建文本读取流
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()
//2.创建文本写入流,如果该文件存在会被覆盖 StreamWriter writer = 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
doc.GetElementsByTagName("student")  //可以得到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)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM