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

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

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

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

1.在电脑上读取文件

首先要解决的当然是在电脑上读取文件了,这个并不难,网上一堆资料。 比如:
  1.                                                     
    1. publicstaticstringLoadFile(stringfilePath)
    2. {
    3. stringurl=Application.streamingAssetsPath+"/"+filePath;
    4. returnFile.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. publicstaticstringLoadFile(stringfilePath)
    2. {
    3. stringurl=Application.streamingAssetsPath+"/"+filePath;
    4. #if UNITY_EDITOR
    5. returnFile.ReadAllText(url);
    6. #elif UNITY_ANDROID
    7. WWW www=newWWW(url);
    8. while(!www.isDone){}
    9. returnwww.text;
    10. #endif
    11. }
理论上WWW是用来读取网络文件的,而Android上需要用这种方式来读取,让我觉得很奇怪。 也许有更好的方式?如果有,希望能和我分享一下。

3.结束

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

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

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


The End。

更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. Android(安卓)NDK开发(六)——使用开源LAME转码mp3
  7. Android(安卓)HTTP网络通信(一):使用HttpURLConnection、HttpClient
  8. storage/emulated/0/(Android中如何将文件选择器中返回的)....路
  9. # bluedroid stack巧谈

随机推荐

  1. Android(安卓)md5加密
  2. android 录音 播放
  3. android解析xml的通用写法
  4. Android(安卓)DatePickerDialog存在执行
  5. Android(安卓)ApiDemos示例解析(178):Vie
  6. 如何避免android上的进程的内存限制
  7. android VoiceRecognition 语音识别并打
  8. Android中点击事件之FocusChangedListene
  9. Android(安卓)终端命令安装 apk 应用程序
  10. android wifi 设置 控制开关