1. 程式人生 > >Unity3D《一看就明白系列》之讀取Txt (一)

Unity3D《一看就明白系列》之讀取Txt (一)

策劃寫Excel  ---> 程式解析Excel為Text(letter) --->程式讀取Txt

 

檔案路徑:

 

Appliction.dataPath 專案資源路徑

 

Application.streamingAssetsPath 

 

PC:專案資源路徑下的streamingAssets資料夾(需要手動建立同名資料夾)“這個目錄只能用WWW讀取(PC特例也可以用檔案讀取去讀(FileStream)),且不能修改(PC可以修改)”

Android:安裝在一個assets資料夾

如果想要把一些程式隨檔案打包到,即在手機端可以檢視,則應該它們放到這一個目錄之下。

IOS:Doucment/app

 

Application.persistentDataPath:

可讀可寫檔案目錄 

在不同的平臺上這個路徑是不一樣的

 

 

文件操作流程:

  1. 找到目錄

  2. 開啟

  3. 讀寫

  4. 關閉

void Start()

    {

        //找到檔案目錄

        string path = Application.streamingAssetsPath + "/configer.ll";

        //開啟檔案

        StreamReader tmpReader = new StreamReader(path);

        //開始讀取 "一行行的讀"

        string line = tmpReader.ReadLine();

        Debug.Log("line=" + line);

        //檢視有多少行

        int lineCount = int.Parse(line);

        for (int i = 0; i < lineCount; i++)

        {

            string tmpLine= tmpReader.ReadLine();

            Debug.Log("第" + i + "條資料為:" + tmpLine);

        }

    }

 

現在豐富文字內容

 

這樣也能讀取一行的內容,但是需要切割(讀取字串)

/// <summary>

    /// 對Txt進行讀取操作

    /// </summary>

    public void ReadStream()

    {

        //找到檔案目錄

        string path = Application.streamingAssetsPath + "/configer.ll";

        //開啟檔案

        StreamReader tmpReader = new StreamReader(path);

        //開始讀取 "一行行的讀"

        string line = tmpReader.ReadLine();

        //Debug.Log("line=" + line);

        //檢視有多少行

        int lineCount = int.Parse(line);

        string tmpLine;

        string[] tmpArray;

        for (int i = 0; i < lineCount; i++)

        {

            tmpLine = tmpReader.ReadLine();

            // Debug.Log("第" + i + "條資料為:" + tmpLine);

            tmpArray = tmpLine.Split(' ');

            //for (int j = 0; j < tmpArray.Length; j++)

            //{

            //    Debug.Log("切割後第" + i + "條資料的第" + j + "個數據元素為" +  tmpArray[j]);

            //}

            PlayerPrefs.SetString(tmpArray[0], tmpArray[1]);

        }

        tmpReader.Close();

    }

 

現在開始寫入資料(這種寫入方式比較簡單,弊端在於後面寫入的內容會完全覆蓋之前的內容)

  /// <summary>

    /// 對Txt進行寫入操作

    /// </summary>

    public void WriteStream()

    {

        //找到目錄

        string path = Application.streamingAssetsPath + "/configer.ll";

        //開啟檔案

        StreamWriter tmpWrite = new StreamWriter(path);

        //進行寫入操作

        tmpWrite.WriteLine("88888888");

        tmpWrite.WriteLine("admin 123");

        //關閉

        tmpWrite.Close();

    }

FileStream 讀寫的是位元組流

/// <summary>

    /// 利用檔案的方式對Txt進行讀取操作

    /// </summary>

    public void FileWriteStream()

    {

        //找到目錄

        string path = Application.streamingAssetsPath + "/configer.ll";

        //開啟檔案

        FileStream tmpFileStream = new FileStream(path, FileMode.OpenOrCreate);

        //將游標跳到從起點開始偏移兩個位置

        tmpFileStream.Seek(2, SeekOrigin.Begin);

        //寫入一個位元組流

        tmpFileStream.WriteByte(12);

        //再寫入一個

        tmpFileStream.WriteByte(34);

        //關閉檔案讀取

        tmpFileStream.Close();

    }

解決這個寫入小bug,剛才寫入的是位元組流,我們需要把它們轉化為可以識別的字串

/// <summary>

    /// 將Txt中的位元組流轉化為可以識別的內容

    /// </summary>

    public void ReadByte()

    {

        //找到目錄

        string path = Application.streamingAssetsPath + "/configer.ll";

        //開啟檔案

        FileStream tmpFileStream = new FileStream(path, FileMode.OpenOrCreate);

        //將游標跳到從起點開始偏移兩個位置

        tmpFileStream.Seek(2, SeekOrigin.Begin);

        int tmpOne = tmpFileStream.ReadByte();

        Debug.Log("第一次讀取的內容:" + tmpOne);

        int tmpTwo = tmpFileStream.ReadByte();

        Debug.Log("第二次讀取的內容:" + tmpTwo);

        tmpFileStream.Close();

    }

總之:一般就是進行讀操作,除了第一次將Excel轉化為Txt除外,如果要改資料就直接對配置檔案進行修改