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

笨木头  2015-11-2 7:48   Unity3D   阅读(7,137)   3条评论
这周被一个问题给折腾了几个晚上,那就是在Android中读取文件,这本是一件很简单的事情,可想象总是美好的。

 

 

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

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

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

 

1.在电脑上读取文件

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

 

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

 

2.在Android上读取文件

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

 

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

 

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

 

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

 

3.结束

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

 

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

 

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

 

为了让更多人能够第一时间搜到我的文章,而不是那些无法对这个问题提供帮助的文章,我额外列一些关键字:
Unity 读取Android文件
Unity 读取安卓文件

 

The End。

 

3 评论

  1. 的确,
    之前想个播放歌词东西也碰到这个问题,哈哈。。
    unity 教程有含金量的教程相对少啊,木头写多点呗

发表评论

电子邮件地址不会被公开。 必填项已用*标注