[笨木头Unity3D]杂记003·Unity在Android中读取文件

这周被一个问题给折腾了几个晚上,那就是在Android中读取文件,这本是一件很简单的事情,可想象总是美好的。

 

 

笨木头花心贡献,啥?花心?不,是用心。

转载请注明,原文地址:http://www.benmutou.com/archives/2094

文章来源:笨木头与游戏开发

 

1.在电脑上读取文件

首先要解决的当然是在电脑上读取文件了,这个并不难,网上一堆资料。
比如:
  1.      
         
         
         
    1. public static string LoadFile(string filePath)
    2. {
    3. string url = Application.streamingAssetsPath + "/" + filePath;
    4. return File.ReadAllText(url);
    5. }

 

文件必须放在Assets\StreamingAssets目录下(可以有子目录),否则移植到其他设备后,会无法读取文件的。
这个目录下的文件是只能读不能写的,我的目的也仅仅是读取文件。
Application.streamingAssetsPath会自动根据不同的平台返回该平台下对应的正确路径(Assets\StreamingAssets目录下的文件在不同平台里会保存到不同的路径,所以需要取出正确的路径)。
然后就是使用File.ReadAllText读取整个文件,保存为一个字符串对象。

 

2.在Android上读取文件

电脑上读取文件很简单,毕竟资料多,而在Android上读取文件就很惨烈了。
也许大家关注的都是Ios吧,唯独我是优先关注Android的。

 

大家可以试试去搜索一下,基本上第一条搜到的就是宣雨松Momo的博客,他写的是【读写文件】的方式(是100%能成功的)。
但是那种方式需要在代码里创建文件,然后再读取文件,而我需要的是读取静态文件,也就是预先创建好的文件。
Momo估计也是比较专注于Ios的,所以他没有进行太多Android的测试。

 

其他搜索的文章也大多在说路径的问题(也就是我第一条标题里所说的内容)。
所以,我不得不发发牢骚,太神奇了,为什么会这么少人关注Android读取的问题呢?
难道这个在API文档里有写?(如果有,请告诉我,我没找到,不知道该用什么关键字)

 

好了,不唠叨了,少是少了点,但还是有资料提到这个问题的。
说解决方案,也确实很简单,在Android里读取文件,得用WWW来读取,如下代码:
  1.       
          
          
          
    1. public static string LoadFile(string filePath)
    2. {
    3. string url = Application.streamingAssetsPath + "/" + filePath;
    4. #if UNITY_EDITOR
    5. return File.ReadAllText(url);
    6. #elif UNITY_ANDROID
    7. WWW www = new WWW(url);
    8. while (!www.isDone) { }
    9. return www.text;
    10. #endif
    11. }
理论上WWW是用来读取网络文件的,而Android上需要用这种方式来读取,让我觉得很奇怪。
也许有更好的方式?如果有,希望能和我分享一下。

 

3.结束

这里有个小地方要注意的,如果你希望把读取的文本按行分割,可以这么做:  
return www.text.Split(new string[] { “\r\n” }, StringSplitOptions.None);

 

要用”\r\n”来分割,而不是”\n”,否则会出现乱七八糟的怪问题(别问我是怎么知道的,心疼,不想提)。

 

好了,希望我这篇文章能帮到和我一样被这个问题折腾的人。


The End。

 

你可能感兴趣的:(unity,读取Android文件)