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