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

2021/6/27 1:14:09

本文主要是介绍c#中txt/xml/json文件的读写操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、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)


这篇关于c#中txt/xml/json文件的读写操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程