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