Unity中常用的几种读取本地文件方式
使用的命名空间如下
using LitJson;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
1、通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件

/// <summary>
/// 通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件
/// </summary>
/// <param name="fileName">文件名称</param>
/// <returns></returns>
public string UnityWebRequestJsonString(string fileName)
{
string url; #region 分平台判断 StreamingAssets 路径
//如果在编译器 或者 单机中 ……
#if UNITY_EDITOR || UNITY_STANDALONE url = "file://" + Application.dataPath + "/StreamingAssets/" + fileName;
//否则如果在Iphone下……
#elif UNITY_IPHONE url = "file://" + Application.dataPath + "/Raw/"+ fileName;
//否则如果在android下……
#elif UNITY_ANDROID
url = "jar:file://" + Application.dataPath + "!/assets/"+ fileName;
#endif
#endregion
UnityWebRequest request = UnityWebRequest.Get(url);
request.SendWebRequest();//读取数据
while (true)
{
if (request.downloadHandler.isDone)//是否读取完数据
{
return request.downloadHandler.text;
}
}
}
```
2、通过UnityWebRequest和StreamReader读取本地StreamingAssets文件夹中的Json文件

1 /// <summary>
2 /// 通过UnityWebRequest和StreamReader读取本地StreamingAssets文件夹中的Json文件
3 /// </summary>
4 /// <param name="jsonName">json文件名</param>
5 /// <returns></returns>
6 public string StreamReaderJsonFromSSPath(string jsonName)
7 {
8 string url;
9 #region 分平台判断 StreamingAssets 路径
10 //如果在编译器 或者 单机中 ……
11 #if UNITY_EDITOR || UNITY_STANDALONE
12 url = Application.dataPath + "/StreamingAssets/" + jsonName;
13 //否则如果在Iphone下……
14 #elif UNITY_IPHONE
15
16 url = Application.dataPath + "/Raw/"+ fileName;
17 //否则如果在android下……
18 #elif UNITY_ANDROID
19 url = Application.dataPath + "!/assets/"+ fileName;
20 #endif
21 #endregion
22 UnityWebRequest webRequest = UnityWebRequest.Get(url);
23 webRequest.SendWebRequest();//读取数据
24 while (true)
25 {
26 if (webRequest.isNetworkError)
27 {
28 Debug.LogError(url + "请求错误:" + webRequest.error);
29 }
30 else
31 {
32 if (webRequest.downloadHandler.isDone)//是否读取完数据
33 {
34 //读取
35 Encoding endoning = Encoding.GetEncoding("utf-8");//识别Json数据内容中文字段
36 StreamReader streamReader = new StreamReader(url, endoning);
37 string str = streamReader.ReadToEnd();
38 streamReader.Close();
39 return str;
40 }
41 }
42 }
43 }
3、通过StreamReader读取本地StreamingAssets文件夹中的Json文件

/// <summary>
/// 通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件
/// </summary>
/// <param name="fileName">文件名称</param>
/// <returns></returns>
public string UnityWebRequestJsonString(string fileName)
{
string url; #region 分平台判断 StreamingAssets 路径
//如果在编译器 或者 单机中 ……
#if UNITY_EDITOR || UNITY_STANDALONE url = "file://" + Application.dataPath + "/StreamingAssets/" + fileName;
//否则如果在Iphone下……
#elif UNITY_IPHONE url = "file://" + Application.dataPath + "/Raw/"+ fileName;
//否则如果在android下……
#elif UNITY_ANDROID
url = "jar:file://" + Application.dataPath + "!/assets/"+ fileName;
#endif
#endregion
UnityWebRequest request = UnityWebRequest.Get(url);
request.SendWebRequest();//读取数据
while (true)
{
if (request.downloadHandler.isDone)//是否读取完数据
{
return request.downloadHandler.text;
}
}
}
```
4、通过FileStream读取本地StreamingAssets文件夹中的文件

/// <summary>
/// 通过FileStream读取本地StreamingAssets文件夹中的文件
/// </summary>
/// <param name="jsonName"></param>
/// <returns></returns>
public string GetAllFileInfos(string jsonName)
{
string jsonPath = Application.streamingAssetsPath + "/" + jsonName;
try
{
using (FileStream fs = new FileStream(jsonPath, FileMode.Open, FileAccess.Read))
{
fs.Seek(0, SeekOrigin.Begin);
var bytes = new byte[fs.Length];
fs.Read(bytes, 0, (int)fs.Length);
string jsonData = Encoding.UTF8.GetString(bytes);
fs.Flush();
fs.Dispose();
fs.Close();
return jsonData;
}
//Debug.Log("所有文件资源信息Assets下文件夹数量:" + fileInfos.Count);
}
catch (Exception e)
{
Debug.LogError(e.Message);
Debug.LogError("文件读取异常:" + jsonPath);
return string.Empty;
}
}
参考资源:https://www.cnblogs.com/unity3ds/p/11742487.html](https://www.cnblogs.com/unity3ds/p/11742487.html
转载链接:https://blog.csdn.net/U3DCoder/article/details/115464140
Unity中常用的几种读取本地文件方式的更多相关文章
- C#中常用的几种读取XML文件的方法
1.C#中常用的几种读取XML文件的方法:http://blog.csdn.net/tiemufeng1122/article/details/6723764/
- web 中常用的两种上传文件的方法总结
这里我们来总结整理一下常用的两种文件上传方式以及要注意的东西: 1.springmvc .MultipartFile 的上传方式. 2.org.apache.commons.fileupload 使用 ...
- 【转】flash air中读取本地文件的三种方法
actionscript中读取本地文件操作有两种代码如下 1.使用File和FileStream两个类,FileStream负责读取数据的所以操作:(同步操作) var stream:FileStre ...
- 【原】实时渲染中常用的几种Rendering Path
[原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...
- 【转载】Python编程中常用的12种基础知识总结
Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- Python编程中常用的12种基础知识总结
原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...
- 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...
- .NET中常用的几种解析JSON方法
一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...
- iOS中常用的四种数据持久化方法简介
iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...
- python中常用的九种数据预处理方法分享
Spyder Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...
随机推荐
- Hadoop批处理方案 和 MPP架构方案 作为数据仓库的区别
1,原理对比 MPP方案中的数据通常在节点之间拆分(分片),每个节点仅处理其本地数据.而且,每家都有专门为 MPP 解决方案开发的复杂而成熟的 SQL 优化器.它们都可以在内置语言和围绕这些解决方案的 ...
- update_base_x.txt
update g_temp.test_baseset field_date = '20210101'::datewhere field_int = 6
- 在windows上搭建spark遇到的问题
报错如下: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: --------- ...
- hive复制表
create table talbe_copy as select * from talbe_origin;
- 生成虚拟mac地址通过dhcp获取ip,耗尽dhco地址池
平台:kali 软件:dhcpstarv 命令 dhcpstarv -i 网卡名称 -e 本机IP 查看dhcp服务器已经分发的地址 cat /tmp/dhcp.leases
- GraalVM, Native Image, Java on Truffle, LLVM runtime, WebAssembly, JavaScript and Node.js关系是什么
GraalVM, Java on Truffle, LLVM runtime, WebAssembly, JavaScript and Node.js关系是什么 GraalVM是一个JDK发行版,支持 ...
- k8s_使用k8s部署博客系统-PV PVC(二)
PV和PVC PV(PersistentVolume)在声明的时候需要指定大小和续写模式:["ReadWriteMany","ReadWriteOnce",&q ...
- k8s入门_label标签、nodeSelector
什么是label Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node, RC(ReplicationController)/RS(ReplicaSet)等. ...
- c++基础: uint8_t uint16_t uint32_t uint64_t size_t ssize_t数据类型
https://blog.csdn.net/lzx_bupt/article/details/7066577 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等.咋一看,好像是个 ...
- mvc和ef如何连接
1.一般加上ef步骤:引入ef包,新建自己的context并继承自DbContext,构造函数里写上链接字符串,属性都是表集合.如何使用:程序中UserContext un = new UserCon ...