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

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

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

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

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

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. 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。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 10:44:28

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

Android中的文件读写全面总结

转载请注明出处:http://blog.csdn.net/bettarwang/article/details/41625187 在深入分析Java中的I/O类的特征及适用场合 一文中,我详细介绍了Java中的I/O,但是,如果以为Android中的I/O与Java中一样,那就大错特错了.实际上,它们有一定的相同之外,但更多的是区别,因为Android系统中的文件存放位置不同,读取方式也不一样.下面将详细介绍Android中的文件读写: 一.资源文件的读取,不需要在Manifest文件中添加权限

Android中的文件读写总结

在Android中,文件主要分为两大类,内部存储和外部存储 内部存储的文件是程序私有的,分为普通文件和Cache文件 外部文件也可以是私有的,也可以是共有的,这要根据文件的目录位置来决定 共有文件可以用JAVA的文件处理方法来处理,但是内部文件必须用openfileinput或者openfileoutput来进行打开和关闭 在对SD卡上的文件进行操作之前需要先检查SD卡的状态(是否可读写,可访问等)

cceditbox和cocostudio联合界面点击事件无响应问题,Android中创建文件夹问题

这两个问题折腾了我一天多时间,尽快下班时候把创建文件夹问题给解决了,刚把cceditbox点击事件无响应问题解决了.真是大爽. 1.创建文件夹 _mkdir()这个c函数就行,在vs ide中,定位的头文件是direct.h,但是这个文件不被ndk编译通过,没有这个文件.好吧,死脑筋,开始怀疑eclipse库路径设置有问题,但是不知道哪不对,搜索到了头大地步,好吧,认真仔细一看,原来是在ndk中,_mkdir函数放在了#include <sys/stat.h>中,改为这个头文件就行了. 2.点

在android中读写文件

在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外部存储设备(SD卡) 在SD卡中读数据是不需要权限的,但是在SD卡中写数据是要权限的: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 读写文件的方式就是用的Java的文件

关于Android Assets读取文件为File对象

关于Android Assets读取文件为File对象的问题,在Assets里面放置文件,在使用的时候,一般是使用AssetManger对象,open方法获取InputStream 然后进行其他操作. 这里遇到了这样需求,直接把Assets里面文件读取为一个File对象,找了半天,没有找到这样方法,搜索了很久,发现这样是行不通的. 是不能直接从asset获取然后直接转换为File对象的,因为asset被存储为apk中,除非你解压Apk文件,一般是不能找到一个Path实例化一个File对象的, 这

Android中的文件权限操作

默认本工程创建的文件本工程对其有读写权限. 我们可以通过context.openFileOutput("文件名", 模式): 我们可以创建私有, 共有, 只读, 只写文件, 默认的文私有文件. 如果别的Android工程访问本工程的文件的话就会受限制, android的内核是linux, 所以他的文件管理和linux中的文件时一样的. 创建文件代码: /** * 创建各种文件 * @throws IOException * */ @SuppressLint({ "WorldW

怎样将unity资源窗口中的文件一下全部折叠/打开

1.选中父物体 2.按住alt 3.再按下键盘上的左键/右键:此父物体下的全部折叠/打开 或者 alt + LMB  点击所要折叠/打开的父物体左边的小三角 怎样将unity资源窗口中的文件一下全部折叠/打开

Android中读取短信信息

Android中读取的短信文件有 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /**  * 所有的短信  */ public static final String SMS_URI_ALL = "content://sms/"; /**  * 收件箱短信  */ public static final String SMS_URI_INBOX = "content://sms/inbox"; /**  * 发件箱短信  */ p

用adb pull命令从android系统中读取文件失败的原因及解决办法

问题:使用adb pull命令从android系统中读取文件失败.显示:Permission denied 原因:是由于文件权限原因引起. 使用ls -l命令查看android系统中的文件权限为: -rw-rw---- app_51   app_51 也就是说,该文件只有app_51用户以及app_51群组拥有读写权限,而adb shell的用户为shell,既不是app_51用户,也不在app_51群组中,所以没有权限读取这个文件.所以就出现了 Permission denied. 解决方法: