C#高階篇(四)---File、FileStream、StreamReader、StreamWriter、xml、json解析
阿新 • • 發佈:2019-01-23
檔案操作
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _026_檔案操作_檢視檔案和資料夾資訊 { class Program { static void Main(string[] args) { //相對路徑:就是找當前程式所在的路徑 //FileInfo fileInfo = new FileInfo("TextFile1.txt"); //絕對路徑:加上檔案完整的路徑名 FileInfo fileInfo = new FileInfo(@"C:\Users\Administrator\Desktop\原始碼\學習csharp程式設計 高階篇\026-檔案操作-檢視檔案和資料夾資訊\bin\Debug\TextFile1.txt"); Console.WriteLine(fileInfo.Exists);//判斷該檔案是否存在 Console.WriteLine(fileInfo.Name);//檔名.字尾 Console.WriteLine(fileInfo.Directory);//取得檔案所在路徑 Console.WriteLine(fileInfo.Length);//取得檔案大小 Console.WriteLine(fileInfo.IsReadOnly);//檔案是否可讀 fileInfo.CopyTo("tt.txt");//複製檔案 fileInfo.Delete();//刪除的是輸出路徑的檔案,工程下的檔案還是存在的 Console.WriteLine(fileInfo.Exists);//判斷該檔案是否存在 FileInfo fileInfo1 = new FileInfo(@"C:\Users\Administrator\Desktop\原始碼\學習csharp程式設計 高階篇\026-檔案操作-檢視檔案和資料夾資訊\bin\Debug\siki.txt"); if (fileInfo1.Exists == false)//如果當前檔案不存在 { fileInfo1.Create();//建立當前檔案 } Console.WriteLine(); //資料夾操作(目錄操作) (按照完整路徑名建立) DirectoryInfo dirInfo = new DirectoryInfo(@"C:\Users\Administrator\Desktop\原始碼\學習csharp程式設計 高階篇\026-檔案操作-檢視檔案和資料夾資訊\bin\Debug"); Console.WriteLine(dirInfo.Exists); Console.WriteLine(dirInfo.Name); Console.WriteLine(dirInfo.Parent); Console.WriteLine(dirInfo.Root); Console.WriteLine(dirInfo.CreationTime); dirInfo.CreateSubdirectory("siki");//在debug資料夾下建立siki資料夾 //建立test資料夾 DirectoryInfo dirInfo2 = new DirectoryInfo("test"); if (dirInfo2.Exists == false) { dirInfo2.Create();//建立目錄 } Console.ReadKey(); } } }
使用File進行檔案讀取、複製操作
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _027_使用File讀寫檔案 { class Program { static void Main(string[] args) { //1、讀取檔案,把每一個行文字讀取成一個字串,最後組成一個字串的陣列 string[] strArray = File.ReadAllLines("TextFile1.txt"); foreach (var s in strArray) { Console.WriteLine(s); } Console.WriteLine(); //2、讀取檔案,生成string string s1 = File.ReadAllText("TextFile1.txt"); Console.WriteLine(s1); Console.WriteLine(); //3、讀取圖片,並且輸出 byte[] byteArray = File.ReadAllBytes("TextFile1.txt"); foreach (var b in byteArray) { Console.Write(b); } //4、複製圖片 byte[] data = File.ReadAllBytes("3.LINQ.png"); File.WriteAllBytes("4.png", data); Console.ReadKey(); } } }
FileStream進行檔案讀取、複製操作
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace _028_使用FileStream讀寫檔案 { class Program { static void Main(string[] args) { //1,建立檔案流 用來操作檔案 FileStream stream = new FileStream("TextFile1.txt", FileMode.Open); //2, 讀取或者寫入資料 byte[] data = new byte[1024];//資料容器 while (true) { int length = stream.Read(data, 0, data.Length); if (length == 0) { Console.WriteLine("讀取結束"); break; } for (int i = 0; i < length; i++) { Console.Write(data[i] + " "); } } //使用filestream完成檔案複製 FileStream readStream = new FileStream("3.LINQ.png",FileMode.Open); FileStream writeStream = new FileStream("LINQ副本.png",FileMode.Create); byte[] data1 = new byte[1024]; while (true) { int length = readStream.Read(data1, 0, data1.Length); if (length == 0) { Console.WriteLine("讀取結束"); break; } else { writeStream.Write(data1,0,length); } } writeStream.Close(); readStream.Close(); Console.ReadKey(); } } }
StreamReader和StreamWriter
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _029_使用StreamReader和StreamWriter讀寫文字檔案 {
class Program {
static void Main(string[] args) {
//1、建立文字檔案讀取流
StreamReader reader = new StreamReader("TextFile1.txt");
while (true)
{
int res = reader.Read();//讀取
if (res == -1)
{
break;
}
else
{
Console.Write((char)res);
}
}
reader.Close();
//2、複製文字,並且寫入文字
StreamWriter writer = new StreamWriter("textfile2.txt");//如果檔案存在,那麼檔案會被覆蓋
while (true)
{
string message = Console.ReadLine();
if (message == "q")
break;
writer.WriteLine(message);//吸入一個字串並換行
}
writer.Close();
}
}
}
xml解析
<skills>
<skill>
<id>2</id>
<name lang="cn">天下無雙</name>
<damage>123</damage>
</skill>
<skill>
<id>3</id>
<name lang="cn">永恆零度</name>
<damage>90</damage>
</skill>
<skill>
<id>4</id>
<name lang="en">Xxx</name>
<damage>400</damage>
</skill>
</skills>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _030_專案了 {
/// <summary>
/// 技能類
/// </summary>
class Skill {
public int Id { get; set; }
public string Name { get; set; }
public string Lang { get; set; }
public int Damage { get; set; }
public override string ToString()
{
return string.Format("Id: {0}, Name: {1}, Lang: {2}, Damage: {3}", Id, Name, Lang, Damage);
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _030_專案了 {
class Program {
static void Main(string[] args) {
//建立技能資訊集合,用來儲存所有的技能資訊
List<Skill> skillList = new List<Skill>();
// XmlDocment專門用來解析xml文件的
XmlDocument xmlDoc = new XmlDocument();
//選擇要載入解析的xml文件的名字
//xmlDoc.Load("skillinfo.txt");
xmlDoc.LoadXml( File.ReadAllText("skillinfo.txt") );//傳遞一個字串(xml格式的字串)
//得到根結點 (xmlnode用來代表一個結點)
XmlNode rootNode = xmlDoc.FirstChild;//獲取第一個結點
//得到根結點下面的子節點的集合
XmlNodeList skillNodeList= rootNode.ChildNodes;//獲取當前結點下面的所有子節點
foreach (XmlNode skillNode in skillNodeList)
{
Skill skill = new Skill();
XmlNodeList fieldNodeList = skillNode.ChildNodes;//獲取skill結點下面所有的結點
foreach (XmlNode fieldNode in fieldNodeList)
{
if (fieldNode.Name == "id")//通過Name屬性 可以獲取一個結點的名字
{
int id = Int32.Parse(fieldNode.InnerText);//獲取結點內部的文字
skill.Id = id;
}else if (fieldNode.Name == "name")
{
string name = fieldNode.InnerText;
skill.Name = name;
skill.Lang = fieldNode.Attributes[0].Value;
}
else
{
skill.Damage = Int32.Parse(fieldNode.InnerText);
}
}
skillList.Add(skill);
}
foreach (Skill skill in skillList)
{
Console.WriteLine(skill);
}
Console.ReadKey();
}
}
}
Json解析
{
"Name":"siki",
"Level":99,
"Age":18,
"SkillList":[
{"id":2,"name":"天下無雙","damage":123 },
{"id":3,"name":"天下無賊","damage":21 },
{"id":4,"name":"咫尺天涯","damage":900 }
]
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _032_json操作 {
class Player
{
public string Name { get; set; }
public int Level { get; set; }
public int Age { get; set; }
public List<Skill> SkillList { get; set; }
public override string ToString()
{
return string.Format("Name: {0}, Level: {1}, Age: {2}, SkillList: {3}", Name, Level, Age, SkillList);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _032_json操作 {
class Skill
{
public int id;
public int damage;
public string name;
public override string ToString()
{
return string.Format("Id: {0}, Damage: {1}, Name: {2}", id, damage, name);
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LitJson;
namespace _032_json操作 {
class Program {
static void Main(string[] args) {
//使用litjson進行解析json文字
//兩種引入litjson的方法
//1,去litjson的網站下載litjson.dll 然後新增引用 找到dll所在目錄
//2,右鍵引用 開啟管理netget程式包,在聯機裡面搜尋litjson 在搜尋結果中選擇一個 點選安裝
List<Skill> skillList = new List<Skill>();
// 1、我們使用jsonMapper去解析json文字
// jsondata代表一個數組或者一個物件,在這裡jsonData代表陣列
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json技能資訊.txt"));
foreach (JsonData temp in jsonData)//在這裡temp代表一個物件
{
Skill skill = new Skill();
JsonData idValue = temp["id"]; //通過字串索引器可以取得鍵值對的值
JsonData nameValue = temp["name"];
JsonData damageValue = temp["damage"];
int id = Int32.Parse(idValue.ToString());
int damage = Int32.Parse(damageValue.ToString());
//Console.WriteLine(id+":"+nameValue.ToString()+":"+damage);
skill.id = id;
skill.damage = damage;
skill.name = nameValue.ToString();
skillList.Add(skill);
}
foreach (var temp in skillList)
{
Console.WriteLine(temp);
}
Console.WriteLine();
//2、使用泛型去解析json
//json裡面物件的鍵必須跟定義的類裡面的欄位或者屬性保持一致
//2.1解析json裡面的每一個技能
Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("json技能資訊.txt"));
foreach (var temp in skillArray)
{
Console.WriteLine(temp);
}
Console.WriteLine();
//2.2解析json裡面的每一個技能
List<Skill> skillList1 = JsonMapper.ToObject<List<Skill>>(File.ReadAllText("json技能資訊.txt"));
foreach (var temp in skillList1)
{
Console.WriteLine(temp);
}
Console.WriteLine();
//2.3解析json裡面的每一個選手
Player p = JsonMapper.ToObject<Player>(File.ReadAllText("主角資訊.txt"));
foreach (var temp in p.SkillList)
{
Console.WriteLine(temp);
}
Console.WriteLine();
//2.4將物件解析為json資料
Player p1 = new Player();
p1.Name = "花千骨";
p1.Level = 100;
p1.Age = 16;
string json =JsonMapper.ToJson(p1);
Console.WriteLine(json);
Console.ReadKey();
}
}
}