乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      關(guān)于txt,xml,json文件的讀寫

       3dC 2014-05-02
      一、關(guān)于txt純文本的讀寫
      其實.txt,.xml,.json這類文件都屬于文本文件,類似的還有.lrc歌詞文件,.ini配置文件,.reg注冊表文件等等,這類文件所儲存的內(nèi)容都是文本,只是各自有它們自己的格式,便于某些時候?qū)S米R別,所以讀取txt文本是最基礎(chǔ)的文本解析。

      靜態(tài)內(nèi)部讀取txt文本:
      這是最簡單的方式,建立TextAsset,直接把文本文件拖上去,就可以用了,
      public TextAsset TxtFile;
      print(TxtFile.text);
      這是直接獲取文本,也就是string類型的字符串。
      要注意的是txt文本的編碼格式,要改為UTF-8格式,否則讀不出來,雖然不會報錯。

      動態(tài)內(nèi)部讀取文本:
      把txt文件放在resources文件夾,利用Resources.Load加載
      上面兩種方式的代碼:





      輸出結(jié)果
      輸出結(jié)果:


      外部讀取文本:
      實際運用中上述的兩種方法使用的并不多,大多都是用的外部讀取,比如解析某文本并在屏幕顯示。
      外部讀取文本需要導(dǎo)入System.IO類,主要使用這個類的File類,具體API請查CSDN,這里只是簡單的調(diào)用讀取。要注意的是平臺在PC。
      我寫了個方法,通過傳遞參數(shù)能獲取文本的第幾行內(nèi)容


      這個函數(shù)第一個參數(shù)是txt的路徑名,第二個參數(shù)是第幾行,0的話返回“”;File.ReadAllLines()方法就是按路徑讀取txt文本的內(nèi)容,返回值是sring[]數(shù)組,元素是每行內(nèi)容。這個是很簡單的。類似的
      File.ReadLines(filepath)是按行讀取,每次只取一行,也比較常用。
      關(guān)于路徑又有絕對路徑和相對路徑,絕對路徑就不解釋了,就是這種"D:/MyTest.txt",相對路徑要注意下,如果用Application.dataPath除了要注意移動平臺之外,特別要注意Application.dataPath在編輯環(huán)境下和在生成exe之后是不一樣的,編輯狀態(tài)下,返回的是Asset位置,生成后Assets不再存在,返回位置是_Data文件夾,所以如果你想加載exe所在位置的txt文本,要先對Application.dataPath進行處理:
      這個方法能在編輯狀態(tài)下輸出和Asset文件夾同目錄的路徑,和生成exe同目錄的路徑,如下面2張圖中的MyTest文本的讀取都可用上面這一套代碼。




      上面說的這四種方式的代碼:


      輸出結(jié)果:


      對于純文本txt文件來說讀取它其中的數(shù)據(jù)并不難,重點是取出的字符串的處理,比如某一行,某個字符,某個序列,我們可以通過這些標(biāo)記來記錄我們的游戲數(shù)據(jù),某些時候還是挺有用的

      Txt文本的寫入:
      要給txt寫入文本可以File.WriteAllLines(FileName,str);
      要修改某行內(nèi)容,我寫了個簡單的函數(shù)


      傳入?yún)?shù),txt路徑,哪一行,修改成的string
      大家可以完善一下,我這是知道行數(shù)的情況,超出行數(shù)的情況大家自己想想怎么改。
      Txt文本文件的創(chuàng)建:
      創(chuàng)建文本很簡單:File.CreateText(fileName),只有一個路徑參數(shù),可以先獲取路徑,再判斷是否存在if(!File.Exists(fileName)){
      files = File.CreateText(fileName);
      }
      OK,關(guān)于純文本的讀寫以及創(chuàng)建,就寫這么多了,感覺夠詳細了,新手也能看懂了吧,大家可以通過創(chuàng)建,讀寫來運用文本記錄數(shù)據(jù)。

      二、關(guān)于XML的讀寫,
      關(guān)于XML相信大家是用得最多的了,這是一種標(biāo)記語言,說得簡單點就是有標(biāo)記的文本,通過這些標(biāo)記讓我們快速查找,修改,替換等操作,容易操作是xml的優(yōu)勢,同樣也是先導(dǎo)入using System.Xml;我們主要用這個類的XmlDocument類,我自己隨便寫了個xml,內(nèi)容如下:


      很簡單,就4個主節(jié)點,每個節(jié)點下面有3個子節(jié)點,下面我們來讀取這個xml的內(nèi)容




      上面我用的是絕對路徑,相對路徑請看上面的txt內(nèi)容,通過GetElementsByTagName直接獲取節(jié)點,返回類型是XmlNodeList數(shù)組,這個數(shù)組就包括了這個節(jié)點的所有內(nèi)容,上面這個是輸出”Mao_001”這個節(jié)點(第一個)的子節(jié)點的內(nèi)容,輸出為

      注意這個[0].ChildNodes[i].InnerText,第一個0是數(shù)組的第一個元素,也就是找到的第一個”Mao_001”,后面的i是它的第幾個子節(jié)點,InnerText是指這個節(jié)點下的內(nèi)容,如果改為Name就是這個節(jié)點的名字,自己可以輸出一下試試。如果要輸出同一個名字的多個節(jié)點,可以這樣


      這是輸出所有”Mao_001”節(jié)點下的內(nèi)容。

      XML的寫入也同樣簡單XmlDocument.CreateElement就是寫入節(jié)點的方法,另外RemoveChild移除某節(jié)點,ReplaceChild替換子節(jié)點,具體的其他方法各位可以查看MSDN~只是我們用xml一般是用來保存有規(guī)律的大量數(shù)據(jù),以讀為主,先把讀數(shù)據(jù)搞明白吧。

      三、關(guān)于JSON的讀寫
      .json文件是一種輕量級的數(shù)據(jù)交換格式,它比純文本多了一些格式,比XML又少了一些標(biāo)記,看起來就像數(shù)組和哈希表的結(jié)合,結(jié)構(gòu)非常簡潔,大多用于網(wǎng)絡(luò)傳輸,當(dāng)然本地用來存儲數(shù)據(jù)也是可以的,同樣的,先using LitJson;這個類是在LitJson.dll中的,所以還要提前導(dǎo)入這個外部類,我們用它來解析json,LitJson.dll自己去下載個就行,解析json也不難


      這是我解析某個json所寫的函數(shù),路徑和上面說的那些一樣,主要是通過JsonMapper.ToObject(str)來將字符串轉(zhuǎn)換為我們要解析的JsonData,有了JsonData就可以按上面直接去數(shù)據(jù)用了,這里加載json數(shù)據(jù)用的是StreamReader,這是通過路徑讀取文本的,可以和前面說的讀取文本一樣使用,另外注意是傳入的參數(shù)是字符串。。。所以原理上,我們可以把txt文本改為json格式,讀取數(shù)據(jù)后傳入同樣能用~~所以不一定非要.Json格式文件,再說網(wǎng)絡(luò)上傳輸給你的也是字符串,這個json要注意的是,利用www外部加載進來的json數(shù)據(jù),通過JsonMapper.ToObject不能轉(zhuǎn)換成JsonData,原因應(yīng)該是編碼的不同,www加載進來后編碼換了,就不能讀了,具體如何利用www來讀json還需進一步探究。

      四。、外部文件和文件夾的創(chuàng)建
      外部文件的創(chuàng)建在前天提到了一點,創(chuàng)建文本,創(chuàng)建其它文件同樣利用File類,用File.Create(path))方法只要改后綴名就可以創(chuàng)建其它文件,比如json,xml等,對于我們來說只有代碼創(chuàng)建文本類文件才有意義,因為你用代碼怎么也不能描述一張圖一首音樂的~用unity創(chuàng)建文件夾:
      創(chuàng)建文件夾用的是System.IO下的CreateDirectory,比如利用unity的截屏功能時,我們希望在軟件同目錄下有一個文件夾,專門來存儲截圖,這是就可以用動態(tài)創(chuàng)建文件夾來實現(xiàn)了,先判斷是否已有文件夾,再決定是否創(chuàng)建








      這個是比較實用的功能,截圖自動保存,文件夾的位置和名字及圖片文件的名字,自己寫過函數(shù)來動態(tài)命名。

      ______________________________________________________
      好文,但幫樓主補充一點,如果不用assetsbundle,發(fā)布時是沒法自動把不在resources文件夾里的文檔包括進去的,同時在發(fā)布后是無法對resources里面的東西進行更改的,也就是說沒法實現(xiàn)寫入。

      解決方法是把必須要發(fā)布的文件放在resources里面,第一次啟動的時候,把resources里面的東西讀取進內(nèi)存,然后存儲到自己想要存的文件夾里面去。然后用destroy(_obj,true)來直接刪除掉resource里面的這個文檔資源(也可以留著不刪)

      在移動平臺上發(fā)布后,ios wp這兩個平臺對文件夾的讀寫權(quán)限是有嚴格限制的。因此application.datapath是無法支持寫入的。這個時候要換用application.persistentdatapath,才有寫入的權(quán)限。只要用戶不卸載這個應(yīng)用,這個文件夾是不會被刪除或者更改的(包括更新應(yīng)用,也不會去更改這個文件夾)。

      ios上面我還沒測試,不過wp平臺下directory是沒法用的。要自己寫插件,用windowsstorage來創(chuàng)建文件夾。

      還有一點如果只是讀取一些小型的xml文件,xmlserializer更好用一些,而且wp平臺上不支持xmldocument類……xmlserializer在這些平臺上都能運行良好……







        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多