这是我参与11月更文应战的第27天,活动详情查看:2021最后一次更文应战

引荐阅览

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件共享
  • 简书地址
  • 我的个人博客
  • QQ群:1040082875

大家好,我是佛系工程师☆恬静的小魔龙☆,不守时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

在程序开发中,经常会遇到要从外部文件中读取数据的情况,文件类型也比较多。

所以,小魔龙就将常见的文件类型:Txt、Json、Xml、Excel、Csv,读取、修正、保存等常见操作代码总结下来。

一方面能够自己温习,另一方面也希望能够帮助更多的人吧。

二、啰嗦两句

读取txt其实是很简略的,用File类、FileStream类、 SteamReader类、 StreamWriter类都能够读取文件。

主要便是分为两种办法,一种是文件读取的办法,一种便是流数据的办法。

读取txt的类许多,读取的办法也许多,有的整篇读取,有的一行一行读取。

读取是第一步,保存数据是第二步,读取的办法也影响了保存数据的办法,如果是一行一行读取,那么就能够一行一行解析,然后保存到数据调集中,如果是整篇读取,就需求对整篇就行每行解析,然后经过分隔符就行切割保存。

三、读取txt文档

咱们新建一个名字叫做TextRead.txt的文档,键入内容后保存。

【Unity3D读取数据】(一)Txt文档操作(创建、读取、写入、修改)
要留意的一点是,文档格局设置为UTF-8,不然中文可能显现不太正确。

3-1、经过TextAsset类读取文档

先来一个最简略的读取办法:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    public TextAsset textTxt;
    void Start()
    {
        Debug.Log(textTxt.text);
    }
}

把文档拖到对应的卡槽中:

【Unity3D读取数据】(一)Txt文档操作(创建、读取、写入、修改)
运行成果:
【Unity3D读取数据】(一)Txt文档操作(创建、读取、写入、修改)

3-2、经过File类读取文件

经过File类的ReadAllText()把文档一切内容读取下来:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string textTxt = File.ReadAllText(Application.streamingAssetsPath + "/TextRead.txt");
        Debug.Log(textTxt);
    }
}

也能够运用File类的ReadAllLines()函数,将这个文档按照一行一行进行悉数读取:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string[] textTxt = File.ReadAllLines(Application.streamingAssetsPath + "/TextRead.txt");
        for (int i = 0; i < textTxt.Length; i++)
        {
            Debug.Log(textTxt[i]);
        }
    }
}

上面两个函数都各自有一个重载函数:

public static string[] ReadAllLines(string path);
public static string[] ReadAllLines(string path, Encoding encoding);
public static string ReadAllText(string path, Encoding encoding);
public static string ReadAllText(string path);

能够以设定的文档格局打开文档。

3-3、以文件流的办法读取文档

经过IO命名空间下的FileStream类进行读取文档数据:

这是第一种办法,经过FileStream类的实例化办法去加载文件:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        //文件流办法读取文档
        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
        {
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            string str= Encoding.UTF8.GetString(bytes);
            Debug.Log(str);
        }
    }
}

还能够经过File类的OpenRead()函数加载文档:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        //文件流办法读取文档
        using (FileStream fs = File.OpenRead(Application.streamingAssetsPath + "/TextRead.txt"))
        {
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            string str = Encoding.UTF8.GetString(bytes);
            Debug.Log(str);
        }
    }
}

仔细看,两者还是有不同的。。。

3-4、以流办法读取文档

经过IO命名空间下的StreamReader类以流办法读取文档:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        //流办法读取文档
        using (StreamReader sr = new StreamReader(path))
        {
            string content = sr.ReadToEnd();
            sr.Close();
            sr.Dispose();
            Debug.Log(content);
        }
    }
}

还能够运用File类的OpenText()函数以流办法读取文档:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        //流办法读取文档
        using (StreamReader sr = File.OpenText(path))
        {
            string content = sr.ReadToEnd();
            sr.Close();
            sr.Dispose();
            Debug.Log(content);
        }
    }
}

留意看,还是有区别的。。。

四、修正数据保存文档

4-1、经过File类写入数据

还记得怎么读取数据吗? File.ReadAllText()函数及ReadAllLines()函数 那么写入数据就运用: File.WriteAllText()函数及ReadWriteLines()函数 File.WriteAllText()

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        File.WriteAllText(path, "测验数据");
    }
}

ReadWriteLines()

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        string[] content = { "测验数据1", "测验数据2", "测验数据3" };
        File.WriteAllLines(path, content);
    }
}

WriteAllText()是将整个文本保存到文档中。 ReadWriteLines()函数是将一个string数组保存到文档中。

4-2、经过文件流的办法写入数据

有读就有写:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        string content = "测验文档";
        //文件流办法读取文档
        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write))
        {
            byte[] bytes = Encoding.UTF8.GetBytes(content);
            fs.Write(bytes, 0, bytes.Length);
            fs.Close();
        }
    }
}

4-3、经过流办法写入数据

有StreamReader类就有StreamWriter类,哎,便是这么方便:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    void Start()
    {
        string path = Application.streamingAssetsPath + "/TextRead.txt";
        string content = "测验文档";
        using (StreamWriter sr = new StreamWriter(path))
        {
            sr.WriteLine(content);
            sr.Close();
            sr.Dispose();
            Debug.Log(content);
        }
    }
}

五、后言

本篇文章讲解了运用各种办法读取文档的办法,有经过File类去读取文档,有经过文件流办法去读取文档,有经过流办法去读取文档。

这些读取的操作都需求引入IO命名空间。

根本一切的文档的读取办法都离开上面的几种办法,接下来共享的读取json文档、xml文档、Excel文档,根本都是用上面的几种读取办法。

如果到后面读取不太懂的,能够在这篇文章再温习一下。