参考自:

在移动平台中,一般读取资源会通过下面这三个路径:

1.Resources :

2.Application.streamingAssetsPath(只读)

3.Application.persistentDataPath(同时这个也是可写的):

几个特殊文件夹:

1.Application.streamingAssetsPath(只读)  :  

需要手动建一个StreamingAssets文件夹。在打包时,Resources文件夹下的东西会被压缩和加密。而StreamingAssets文件夹中的内容则会原封不动的打入包中。

一般在Resources下放预制,StreamingAssets下放二进制文件(csv、bin、txt、xml、json、AB包等)

返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径,工程目录下面的Assets/StreamingAssets。

安卓不能通过File类和FileStream来读取这个路径,只能通过WWW类获取然后用File写到持久化目录。这是因为在Android中,StreamingAssets的东西会被包含在.jar包中(类似于zip压缩文件);IOS和QP8可以用File.Copy。

 

2.Application.persistentDataPath(可读可写) :File.WriteAllText,File.ReadAllText

安卓只有这个文件夹可以用File类来读写;

返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件。移动端可用的保存生成文件的地方。
设备中的公开目录,根据平台的不同而不同。这里面的文件不会因为App升级而删除。

3.Application.dataPath(只读):返回程序的数据文件所在文件夹的路径

4.Application.temporaryCachePath(只读):返回一个临时数据的缓存目录。




移动端的特殊文件夹:


Android:
Application.dataPath                                   /data/app/xxx.xxx.xxx.apk
Application.streamingAssetsPath           jar:file://   Application.dataPath !/assets
Application.persistentDataPath                /data/data/xxx.xxx.xxx/files
Application.temporaryCachePath            /data/data/xxx.xxx.xxx/cache
iOS:
Application.dataPath                                   Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
Application.streamingAssetsPath             Application.dataPath/Raw
Application.persistentDataPath               Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
Application.temporaryCachePath            Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches



测试

游戏开始把StreamingAssets文件复制到持久化目录:

#if UNITY_EDITOR
            var dbPath = string.Format(@"Assets/StreamingAssets/{0}", DatabaseName);
#else
        // 检测文件在持久化目录下是否存在
        var filepath = string.Format("{0}/{1}", Application.persistentDataPath, DatabaseName);

        if (!File.Exists(filepath))
        {
            // 不存在则从StreamingAssets中读取写到持久化目录中
#if UNITY_ANDROID 
            var loadDb = new WWW("jar:file://" + Application.dataPath + "!/assets/" + DatabaseName);  // 安卓下streamingAssets目录
            while (!loadDb.isDone) { }  
            // 写到持久化目录
            File.WriteAllBytes(filepath, loadDb.bytes);
#elif UNITY_IOS
                 var loadDb = Application.dataPath + "/Raw/" + DatabaseName;  //IOS下StreamingAssets目录
                //保存到持久化目录
                File.Copy(loadDb, filepath);
#elif UNITY_WP8
                var loadDb = Application.dataPath + "/StreamingAssets/" + DatabaseName;  
                File.Copy(loadDb, filepath);

#elif UNITY_WINRT
		var loadDb = Application.dataPath + "/StreamingAssets/" + DatabaseName; 
		File.Copy(loadDb, filepath);
#else
	var loadDb = Application.dataPath + "/StreamingAssets/" + DatabaseName;
	File.Copy(loadDb, filepath);

#endif



引用的案例:



1. using UnityEngine;  
2. using System.Collections;  
3. using System.IO;  
4. using UnityEngine.UI;  
5. using System.Text;  
6.   
7. public class Test : MonoBehaviour {  
8.   
9. public Text text0;  
10. public Text text1;  
11. public Text text2;  
12. public Text text3;  
13. private string path;  
14. private string content;  
15.   
16. void Start ()   
17.     {  
18. //显示不同平台下的路径信息  
19. "\n" + Application.streamingAssetsPath + "\n" + Application.persistentDataPath;  
20.   
21. //读取StreamingAssets下的文件  
22. if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)  
23.         {  
24. "file://" + Application.streamingAssetsPath + "/Data/AA.bin";  
25.         }  
26. else if (Application.platform == RuntimePlatform.Android)  
27.         {  
28. "/Data/AA.bin";  
29.         }     
30. "\n" + s + "\n"; }));  
31.   
32. //读取Resources下的文件  
33. "CC").text;  
34.   
35. //读取与写入Application.persistentDataPath下的文件  
36. "/BB.txt";  
37. "保佑这个也能读取成功啊~~hello??", Encoding.UTF8);  
38.         text3.text = File.ReadAllText(path, Encoding.UTF8);  
39.     }  
40.   
41. string url, System.Action<string> action)  
42.     {  
43. new WWW(url);  
44. return www;  
45. //Debug.Log(www.text);  
46.         action(www.text);  
47.     }  
48.   
49. }