C#高级篇(四)---File、FileStream、StreamReader、StreamWriter、xml、json解析

文件操作

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();
        }
    }
}

C#高级篇(四)---File、FileStream、StreamReader、StreamWriter、xml、json解析_第1张图片

使用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();
        }
    }
}

C#高级篇(四)---File、FileStream、StreamReader、StreamWriter、xml、json解析_第2张图片


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();
        }
    }
}



C#高级篇(四)---File、FileStream、StreamReader、StreamWriter、xml、json解析_第3张图片


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();
            
        }
    }
}

C#高级篇(四)---File、FileStream、StreamReader、StreamWriter、xml、json解析_第4张图片


xml解析


  
    2
    天下无双
    123
   
  
    3
    永恒零度
    90
  
  
    4
    Xxx
    400
  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace _030_项目了 {
    /// 
    /// 技能类
    /// 
    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 skillList = new List();

            // 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 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 skillList = new List();
           // 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(File.ReadAllText("json技能信息.txt"));
            foreach (var temp in skillArray)
            {
                Console.WriteLine(temp);
            }
            Console.WriteLine();
            //2.2解析json里面的每一个技能
            List skillList1 = JsonMapper.ToObject>(File.ReadAllText("json技能信息.txt"));
            foreach (var temp in skillList1)
            {
                Console.WriteLine(temp);
            }
            Console.WriteLine();
            //2.3解析json里面的每一个选手
            Player p = JsonMapper.ToObject(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();
        }
    }
}

C#高级篇(四)---File、FileStream、StreamReader、StreamWriter、xml、json解析_第5张图片




你可能感兴趣的:(C#)