[Unity基础]移动平台下的文件读写
2016-12-20 17:08
211 查看
参考自:http://blog.csdn.net/lyh916/article/details/52161633
在移动平台中,一般读取资源会通过下面这三个路径:
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文件复制到持久化目录:
引用http://blog.csdn.net/lyh916/article/details/52161633的案例:
[csharp] view
plain copy
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.UI;
using System.Text;
public class Test : MonoBehaviour {
public Text text0;
public Text text1;
public Text text2;
public Text text3;
private string path;
private string content;
void Start ()
{
//显示不同平台下的路径信息
text0.text = Application.dataPath + "\n" + Application.streamingAssetsPath + "\n" + Application.persistentDataPath;
//读取StreamingAssets下的文件
if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
{
path = "file://" + Application.streamingAssetsPath + "/Data/AA.bin";
}
else if (Application.platform == RuntimePlatform.Android)
{
path = Application.streamingAssetsPath + "/Data/AA.bin";
}
StartCoroutine(Load(path, (s) => { content += Application.platform + "\n" + s + "\n"; }));
//读取Resources下的文件
text2.text = Resources.Load<TextAsset>("CC").text;
//读取与写入Application.persistentDataPath下的文件
path = Application.persistentDataPath + "/BB.txt";
File.WriteAllText(path, "保佑这个也能读取成功啊~~hello??", Encoding.UTF8);
text3.text = File.ReadAllText(path, Encoding.UTF8);
}
IEnumerator Load(string url, System.Action<string> action)
{
WWW www = new WWW(url);
yield return www;
//Debug.Log(www.text);
action(www.text);
}
}
在移动平台中,一般读取资源会通过下面这三个路径:
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
引用http://blog.csdn.net/lyh916/article/details/52161633的案例:
[csharp] view
plain copy
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.UI;
using System.Text;
public class Test : MonoBehaviour {
public Text text0;
public Text text1;
public Text text2;
public Text text3;
private string path;
private string content;
void Start ()
{
//显示不同平台下的路径信息
text0.text = Application.dataPath + "\n" + Application.streamingAssetsPath + "\n" + Application.persistentDataPath;
//读取StreamingAssets下的文件
if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
{
path = "file://" + Application.streamingAssetsPath + "/Data/AA.bin";
}
else if (Application.platform == RuntimePlatform.Android)
{
path = Application.streamingAssetsPath + "/Data/AA.bin";
}
StartCoroutine(Load(path, (s) => { content += Application.platform + "\n" + s + "\n"; }));
//读取Resources下的文件
text2.text = Resources.Load<TextAsset>("CC").text;
//读取与写入Application.persistentDataPath下的文件
path = Application.persistentDataPath + "/BB.txt";
File.WriteAllText(path, "保佑这个也能读取成功啊~~hello??", Encoding.UTF8);
text3.text = File.ReadAllText(path, Encoding.UTF8);
}
IEnumerator Load(string url, System.Action<string> action)
{
WWW www = new WWW(url);
yield return www;
//Debug.Log(www.text);
action(www.text);
}
}
相关文章推荐
- [Unity基础]移动平台下的文件读写
- unity 各平台下文件读写沙箱目录及ios审核(原)
- unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- Unity 关于安卓和各平台读写本地json文件,WWW读取本地文件,Unity各路径API(persistentDataPath,StreamingAssets文件夹),目前较完整的详解
- unity关于各个平台文件读写问题
- unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- Unity在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- (转) unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- Unity在移动平台中的文件操作路径详解
- unity 在移动平台中,文件操作路径详解
- unity 在移动平台中,文件操作路径详解 (转)
- (转) unity 在移动平台中,文件操作路径详解
- (转) unity 在移动平台中,文件操作路径详解
- Unity对于移动平台动态读取外部文件