1、Unity中各路径和目录的对应关系

image.png

其中,安卓中的路径是有两种分支的

image.png

在打包面板中,有个Write Access

当我们选择Internal Only就是表示沙盒路径,/data/data/com.xxx.xxx/

对应的Android方法为 getFilesDir()

当我们选择SDCard时就表示存储到SD卡上,: /storage/emulated/0/Android/data/com.example.myapplication/files

2、各个路径的特点

Resources

是作为一个Unity的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打到发布包中。

特点:

只读,即不能动态修改。所以想要动态更新的资源不要放在这里。

会将文件夹内的资源打包集成到.asset文件里面。因此建议可以放一些Prefab,因为Prefab在打包时会自动过滤掉不需要的资源,有利于减小资源包的大小。

资源读取使用Resources.Load()。

任何平台都可以用File读取

StreamingAssets

StreamingAssets和Resources很像。同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此StreamingAssets主要用来存放一些二进制文件。在任何平台中总可以统一使用Application.streamingAssetsPath 属性来获得这一文件夹路径。

特点:

PC端可读写,移动端只读不可写。

主要用来存放二进制文件,配置文件。

注意,在Android中,StreamingAssets中的文件包含在一个.jar压缩文件(基本上与标准的zip为统一格式)中,所以移动端时只能用过UnityWebRequest类来读取。在PC下,可以用File类API(如File.ReadAllText)读写StreamingAssets文件夹中的文件;在IOS和Android平台下,不能用File类API读取。

任何平台都可以用www方式异步读取该文件夹内容。PC和IOS平台下,读取路径必须加上"file://",而安卓不需要。

在IOS和Android下,还能用AssetBundle.LoadFromFile来同步读取数据。

PersistentDataPath

这个路径下是可读写。而且在IOS上就是应用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。并且在Android打包的时候,ProjectSetting页面有一个选项Write Access,可以设置它的路径是沙盒还是sdcard。

特点:

-可读写,不过只能运行时才能写入或者读取。 提前将数据存入这个路径是不可行的。

无内容限制。你可以从 StreamingAsset 中读取二进制文件或者从 AssetBundle 读取文件来写入 PersistentDataPath 中。

写下的文件,可以在电脑上查看。同样也可以清掉。

可以使用UnityWebRequest类来读取。

可以用File类API(如File.ReadAllText)读写PersistentDataPath文件夹中的文件(安卓下唯一可以用File类的路径)

Application.DataPath

注意移动端是没有访问权限的

3、Unity文件的读写方式

几个文件操作类介绍

1、File类和FileInfo类的介绍:

File类和FileInfo类都是提供用于创建、复制、删除、移动和打开文件的方法,一个是静态的,一个是实例方法。简单来说,就是Flie类可以直接通过类名调用其中的某些函数,而FileInfo类需要先实例化一个对象,再通过对象调用函数。一般来说,如果是对文件进行少量的操作,则建议用File类,如果是对文件进行大量的存取操作,建议用FileInfo类,具体原因参照这 。 这里是官方的文档,File类, FileInfo类。

2、FileStream类和StreamWriter,StreamReader类的简单介绍:

FileStream类是一个操作类,FileStream 对象表示在磁盘或网络路径指向文件的流,这个类提供了在文件中读写字节的方法。简单来说就是这个Filestream这个文件流对 .txt等文件读写内容时需要使用的一个工具。如果File类是一个总的文件的话,那么fileStream类就是对文件进行操作的笔。 FileStream类和StreamWriter,StreamReader类的区别在于FileStream类操作的是字节和字节数组,而StreamWriter等类操作的是字符数据。StreamWriter类操作的只能是文本类型的,而FileStream类的对象可以是任何类型的。操作文本的话用StreamWriter等比较方便。

下面是用File和FileInfo两种方式去创建文件,以及用StreamWriter写文件的方法

File方式

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

using System.IO;

public class FileOperate : MonoBehaviour {

public void WriteFileByLine(string file_path,string file_name,string str_info)

StreamWriter sw;

if(!File.Exists(file_path+"//"+file_name))

sw=File.CreateText(file_path+"//"+file_name);//创建一个用于写入 UTF-8 编码的文本

Debug.Log("文件创建成功!");

else

sw=File.AppendText(file_path+"//"+file_name);//打开现有 UTF-8 编码文本文件以进行读取

sw.WriteLine(str_info);//以行为单位写入字符串

sw.Close ();

sw.Dispose ();//文件流释放

void Start()

WriteFileByLine (Application.persistentDataPath,"my_newfile.txt","信息");

FileInfo方式

public void WriteFileByLine(string file_path,string file_name,string str_info)

StreamWriter sw;

FileInfo file_info = new FileInfo (file_path+"//"+file_name);

if(!file_info.Exists)

sw=file_info.CreateText();//创建一个用于写入 UTF-8 编码的文本

Debug.Log("文件创建成功!");

else

sw=file_info.AppendText();//打开现有 UTF-8 编码文本文件以进行读取

sw.WriteLine(str_info);

sw.Close ();

sw.Dispose ();//文件流释放

4、Unity路径解疑

上面了解各个路径的特性,读写方式,但是还有一个经常容易犯错的地方,就是路径的写法。

Unity3D关于路径资源的调用分为绝对路径和相对路径,

绝对路径

windows下:

path = "file://D:\TestFile\Cat\" + Number + ".png";

这种写法,因为斜杠需要转移,所以这里是双斜杠,不然报语法错误,有些时候没写双斜杠但又不报语法错,但是路径是错误的,就很难发现问题。

所以建议用另外一种写法:

@"file:///D:\TestFile\Cat" + Number + ".png";或者@"file://D:\TestFile\Cat" + Number + ".png";

file后面跟三个斜杠或者两个斜杠都行。

安卓下:

path ="jar:file://"+PersistentDataPath(示例)+ Number + ".png";

注:因为在安卓下对unity来说也只有PersistentDataPath,StreamingAssets这几个路径是可用的,通常不会这么使用,可以忽略,而且绝对路径限制大,一般采用相对路径。

相对路径

PC上:

url = Application.persistentDataPath + "/mydir/qq.txt";

或者

string path= Path.Combine(Application.persistentDataPath, fillName);

安卓下:

"file://" + Application.streamingAssetsPath + "\TestFile\Cat\" + Number + ".png";

"file://" + Application.PersistentDataPath+ "\TestFile\Cat\" + Number + ".png";

或者"file://" + Path.Combine(Application.persistentDataPath, fillName);

总之,路径写法的东西,不行就多是一两次就好了。

unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...相关推荐

  1. Unity3d android 通信之 unity3d读取android SD卡文件

    此篇博文解决的问题是: 1.unity3d如何访问android SD卡的文件 2.如果把android端代码以jar包形式由unity3d调用 闲话不多说,现在咱们进入正题. 一.unity3d如何 ...

  2. 快速更新android sd卡,如何修复损坏的Android SD卡和SD卡恢复[2020更新]

    SD卡不是将您的数据保存在手机上的100%安全的地方,因为有一天它可能会损坏. 如果不幸发生,请冷静. 在这里,您将了解一些方法 修复损坏的Android SD卡 并避免您的数据丢失在损坏的SD卡中. ...

  3. android studio gradle配置_Unity打包Android最全攻略(含完整流程及常见问题)

    洪流学堂,让你快人几步.你好,我是你的技术探路者郑洪智,你可以叫我大智. 最近写了很多AR教程,在收到的小伙伴的求助里面,超过80%都是Android打包的问题.这篇就把你Android打包问题统统搞 ...

  4. Unity性能优化全攻略

    #Unity性能优化全攻略 总结自Siki的性能优化. ##优化相关前提 ###Unity游戏安装包大/运行卡的原因 Mono虚拟机 解决这个问题 ###DrawCall https://zhuanl ...

  5. Android面试题最全攻略!

    这是安卓系列的第四个课题,面试相关.在这个册子里面,完成了一些经典问题的回答,以及一些建议,学习技巧. Android 深入系统完全讲解(三)操作系统完全攻略 PDF Android 深入系统完全讲解 ...

  6. 用C#制作PDF文件全攻略(转)

    PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段"暴力"破解 ...

  7. 用C# itextsharp.dll制作PDF文件全攻略

    StreamWriter pPDF=new StreamWriter(filePath); ArrayList xRefs=new ArrayList(); float yPos =0f; long ...

  8. Android 系统(265)----Android进程保活全攻略(上)

    Android进程保活全攻略(上) 对于每个公司的APP来说,当然都希望自己APP的进程尽量的不被杀死,于是乎,就有了一些列进程保活的方法出现,网上也有很多关于这类的文章,但网上很多资料往往只告诉了思 ...

  9. 用C#制作PDF文件全攻略 (专至csdn)

    前 言 丽水市汽车运输集团有限公司信息中心 苟安廷 PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜 ...

最新文章

  1. 其他算法-浅谈小波变换
  2. ConcurrentHashMap的源码分析-put方法第二阶段
  3. 那些 IT 界的神翻译,原来我学不好编程的原因就在这
  4. Android插件化开发之DexClassLoader动态加载dex、jar小Demo
  5. AtCoder Beginner Contest 174 总结
  6. 会玩!抖音上线拉春联特效 “拜个抖音年”活动参与人数超65万
  7. javascript面向对象技术基础
  8. Unity Shader Alpha Blend 填坑记录
  9. [c#]删除PDF权限密码
  10. PHP--ThinkPHP6.0怎么打开debug模式
  11. win10联想软件商店壁纸的保存目录在哪
  12. heritrix3.x--SURT / 限定heritrix的爬行域
  13. mgre的全连和星型拓扑实验
  14. java 重写equals方法的种种“坑”
  15. 六月情报!六月情报!IAC的终结,反波胆的没落,龙抬头的套路
  16. 连接手机传输驱动安装问题
  17. JavaScript——基于原型编程、多范式的动态脚本语言
  18. Spring boot集成axis2开发webservice 服务
  19. Jetpack系列:喜新厌旧的程序员~KTX篇
  20. 详解目前最火的自主泊车技术

热门文章

  1. 快报:Python 被爆重大“黑料”!程序员:劲爆!
  2. 微服务精华问答 | 什么是金丝雀释放?
  3. 如何使用「番茄法」高效的写算法题?
  4. 别人在忙挖矿,京东架构师却悄悄用区块链搞了件大事
  5. 接口使用jwt返回token_API接口JWT方式的Token认证(下),客户端(Android)的实现
  6. python多线程操作字典_在Python中使用带有线程的全局字典
  7. android studio黄油刀依赖,如何在Android Studio中设置ButterKnife插件?
  8. matlab knn实现,Matlab之KNN实现
  9. Flowable 数据库表结构 ACT_RE_PROCDEF
  10. 工作簿长时间空闲时自动关闭