Unity中常用的幾種讀取本地文件方式


使用的命名空間如下

using LitJson;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;

1、通過UnityWebRequest獲取本地StreamingAssets文件夾中的Json文件

      /// <summary>
    /// 通過UnityWebRequest獲取本地StreamingAssets文件夾中的Json文件
    /// </summary>
    /// <param name="fileName">文件名稱</param>
    /// <returns></returns>
    public string UnityWebRequestJsonString(string fileName)
    {
        string url;

        #region 分平台判斷 StreamingAssets 路徑
        //如果在編譯器 或者 單機中  ……
#if UNITY_EDITOR || UNITY_STANDALONE

        url = "file://" + Application.dataPath + "/StreamingAssets/" + fileName;
        //否則如果在Iphone下……
#elif UNITY_IPHONE

            url = "file://" + Application.dataPath + "/Raw/"+ fileName;
            //否則如果在android下……
#elif UNITY_ANDROID
            url = "jar:file://" + Application.dataPath + "!/assets/"+ fileName;
#endif
        #endregion
        UnityWebRequest request = UnityWebRequest.Get(url);
        request.SendWebRequest();//讀取數據
        while (true)
        {
            if (request.downloadHandler.isDone)//是否讀取完數據
            {
                return request.downloadHandler.text;
            }
        }
    }
```
View Code

2、通過UnityWebRequest和StreamReader讀取本地StreamingAssets文件夾中的Json文件

 1      /// <summary>
 2     /// 通過UnityWebRequest和StreamReader讀取本地StreamingAssets文件夾中的Json文件
 3     /// </summary>
 4     /// <param name="jsonName">json文件名</param>
 5     /// <returns></returns>
 6     public string StreamReaderJsonFromSSPath(string jsonName)
 7     {
 8         string url;
 9         #region 分平台判斷 StreamingAssets 路徑
10         //如果在編譯器 或者 單機中  ……
11 #if UNITY_EDITOR || UNITY_STANDALONE
12         url = Application.dataPath + "/StreamingAssets/" + jsonName;
13         //否則如果在Iphone下……
14 #elif UNITY_IPHONE
15 
16             url = Application.dataPath + "/Raw/"+ fileName;
17             //否則如果在android下……
18 #elif UNITY_ANDROID
19             url =  Application.dataPath + "!/assets/"+ fileName;
20 #endif
21         #endregion
22         UnityWebRequest webRequest = UnityWebRequest.Get(url);
23         webRequest.SendWebRequest();//讀取數據
24         while (true)
25         {
26             if (webRequest.isNetworkError)
27             {
28                 Debug.LogError(url + "請求錯誤:" + webRequest.error);
29             }
30             else
31             {
32                 if (webRequest.downloadHandler.isDone)//是否讀取完數據
33                 {
34                     //讀取
35                     Encoding endoning = Encoding.GetEncoding("utf-8");//識別Json數據內容中文字段
36                     StreamReader streamReader = new StreamReader(url, endoning);
37                     string str = streamReader.ReadToEnd();
38                     streamReader.Close();
39                     return str;
40                 }
41             }
42         }
43     }
View Code

 

3、通過StreamReader讀取本地StreamingAssets文件夾中的Json文件 

      /// <summary>
    /// 通過UnityWebRequest獲取本地StreamingAssets文件夾中的Json文件
    /// </summary>
    /// <param name="fileName">文件名稱</param>
    /// <returns></returns>
    public string UnityWebRequestJsonString(string fileName)
    {
        string url;

        #region 分平台判斷 StreamingAssets 路徑
        //如果在編譯器 或者 單機中  ……
#if UNITY_EDITOR || UNITY_STANDALONE

        url = "file://" + Application.dataPath + "/StreamingAssets/" + fileName;
        //否則如果在Iphone下……
#elif UNITY_IPHONE

            url = "file://" + Application.dataPath + "/Raw/"+ fileName;
            //否則如果在android下……
#elif UNITY_ANDROID
            url = "jar:file://" + Application.dataPath + "!/assets/"+ fileName;
#endif
        #endregion
        UnityWebRequest request = UnityWebRequest.Get(url);
        request.SendWebRequest();//讀取數據
        while (true)
        {
            if (request.downloadHandler.isDone)//是否讀取完數據
            {
                return request.downloadHandler.text;
            }
        }
    }
```
View Code

 4、通過FileStream讀取本地StreamingAssets文件夾中的文件

    /// <summary>
    /// 通過FileStream讀取本地StreamingAssets文件夾中的文件
    /// </summary>
    /// <param name="jsonName"></param>
    /// <returns></returns>
    public string GetAllFileInfos(string jsonName)
    {
        string jsonPath = Application.streamingAssetsPath + "/" + jsonName;
        try
        {
            using (FileStream fs = new FileStream(jsonPath, FileMode.Open, FileAccess.Read))
            {
                fs.Seek(0, SeekOrigin.Begin);
                var bytes = new byte[fs.Length];
                fs.Read(bytes, 0, (int)fs.Length);
                string jsonData = Encoding.UTF8.GetString(bytes);
                fs.Flush();
                fs.Dispose();
                fs.Close();
                return jsonData;
            }
            //Debug.Log("所有文件資源信息Assets下文件夾數量:" + fileInfos.Count);
        }
        catch (Exception e)
        {
            Debug.LogError(e.Message);
            Debug.LogError("文件讀取異常:" + jsonPath);
            return string.Empty;
        }
    }
View Code

參考資源:https://www.cnblogs.com/unity3ds/p/11742487.html](https://www.cnblogs.com/unity3ds/p/11742487.html

轉載鏈接:https://blog.csdn.net/U3DCoder/article/details/115464140


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM