[Pico]读取新建写入文本文件
Pico VR眼睛使用的是Android系统。在用Unity打包出apk后进行相关程序的开发。开发过程中遇到了参数的读取写入等操作,如何进行处理,这里介绍下自己的经历,仅供参考。
一、关于读写权限。
Pico可以用USB连接到电脑,读取内部存储和mini SDCard等路径中内容,可以在各个路径中新建文件夹,但是却不能直接新建txt文本(这个文本用于存储程序的参数等)。
通过在PC端新建txt后,然后复制到对应的目录中即可。
二、关于Android中各类路径的读取
Unity中操作读取Android目录,包括内部存储路径和外部路径。
1.获取内部存储路径,返回如/storage/emulatged/0/Android/Data/com.CXX.XXX/路径
//仅仅获取内部存储地址private String GetAndroidContextExternalFilesDir(){string path = "";if (Application.platform == RuntimePlatform.Android){try{using (AndroidJavaClass ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){using (AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("currentActivity")){path = ajo.Call<AndroidJavaObject>("getExternalFilesDir", null).Call<string>("getAbsolutePath");}}}catch (Exception e){Debug.LogWarning("Error fetching native Android external storage dir: " + e.Message);}}return path;}
2.可以根据对应的标志优先获取外部存储路径,无存储卡时,返回内部存储路径
private string GetAndroidExternalFilesDir(){
#if UNITY_ANDROIDusing (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")){try{using (AndroidJavaObject context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")){// Get all available external file directories (emulated and sdCards)AndroidJavaObject[] externalFilesDirectories = context.Call<AndroidJavaObject[]>("getExternalFilesDirs", null);AndroidJavaObject emulated = null;AndroidJavaObject sdCard = null;for (int i = 0; i < externalFilesDirectories.Length; i++){AndroidJavaObject directory = externalFilesDirectories[i];using (AndroidJavaClass environment = new AndroidJavaClass("android.os.Environment")){// Check which one is the emulated and which the sdCard.bool isRemovable = environment.CallStatic<bool>("isExternalStorageRemovable", directory);bool isEmulated = environment.CallStatic<bool>("isExternalStorageEmulated", directory);if (isEmulated)emulated = directory;else if (isRemovable && isEmulated == false)sdCard = directory;}}// Return the sdCard if availableif (sdCard != null)return sdCard.Call<string>("getAbsolutePath");elsereturn emulated.Call<string>("getAbsolutePath");}}catch (Exception e){Debug.LogWarning("Error fetching native Android external storage dir: " + e.Message);return "";}}
#endif}
3.根据新建的文本路径读取文本内容
可以参考使用下面函数分割路径,获取想要的路径
void GetFilePath(string serverIP){string path;
#if UNITY_ANDROIDstring[] sss = new string[1] { "com" };string[] sds = new string[1] { "Android" };string temp = GetAndroidExternalFilesDir();string[] src = temp.Split(sds, StringSplitOptions.None);path = "file://" + src[0] + serverIP;
#elif UNITY_IPHONEpath= "file://" + Application.streamingAssetsPath + "/" + serverIP;
#elif UNITY_STANDALONE_WIN || UNITY_EDITORpath= "file:///" + Application.streamingAssetsPath + "/" + serverIP;
#elsepath= String.Format("{0}/{1}", Application.streamingAssetsPath, serverIP);
#endiffilePath = path;}
三、通过程序动态新建文本
1.Android为每一个apk都创建一个具有新建文件权限的目录,这个目录的路径可以使用
Application.persistentDataPath来读取
2.新建文件
public void CreateFile(string path, string info){FileInfo t = new FileInfo(path);if (!t.Exists){StreamWriter sw;//如果此文件不存在则创建try{sw = t.CreateText();//以行的形式写入信息sw.WriteLine(info);//关闭流sw.Close();//销毁流sw.Dispose();SetServerIP(path, info);}catch (Exception e){return;}}else{LoadByWWW();}}
当文件不存在时首先新建文件,然后再读取文件。
3.写入文件
StreamWriter sw = new StreamWriter(strFilePath, false);sw.WriteLine("{0}", strIpContent);sw.Close();sw.Dispose();
当文件存在后,以上进行文本文件的写入,strFilePath为文件路径,strIpContent为写入内容
4.文件的读取通过WWW方式实现
public void LoadByWWW(){if(filePath=="")GetFilePath("serverIP.txt");StartCoroutine(doLoadByWWW("file://" + filePath));}IEnumerator doLoadByWWW(string path){WWW w = new WWW(path);yield return w;if (w.isDone){SetServerIP(path, w.text);}}
以上零散的一些功能希望对大家有所帮助。
[Pico]读取新建写入文本文件相关推荐
- android studio 写文件,在Android Studio中从我自己的类读取和写入文本文件
我一直在试图创建一个名为TextFileReaderWriter的类我想使用getters和setters来读取和写入文本文件,以便我可以调用类,并通过简单地使用setfileContents(som ...
- 【MATLAB】读取和写入文本文件
在MATLAB中,来读取和写入文本文件是很简单的事.下面,就来简单介绍下.如果有其他问题,请留言. 一.读取文本文件 思路: 1.用fopen来打开一个文件句柄 2.用fgetl来获得文件中的一行,如 ...
- java txtreader_Java读取和写入文本文件内容
1.Java 写入文本文件源码 import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; ...
- VB.NET 读写HTML 文件,VB.Net读取和写入文本文件
StreamReader和StreamWriter类用于读取和写入数据到文本文件.这些类继承自抽象基类Stream,它支持读取和写入字节到文件流中. StreamReader类 StreamReade ...
- readmemh函数引用的txt格式_[转载](zz)用于读取和写入文本文件Verilog代码
系统函数$fopen用于打开一个文件,并还回一个整数指针.然后,$fdisplay就可以使用这个文件指针在文件中写入信息,写完后,则可以使用$fclose系统关闭这个文件 例如: integer wr ...
- VBA使用FileSystemObject将读取或写入文本文件
有时,我们需要将一个文本文件中的数据读取到Excel单元格中,或将指定单元格的内容按指定的格式导出到文本文件中,这时,我们就需要使用Scripting.FileSystemObject对象来进行操作. ...
- JAVA——一次性读取或者写入文本文件所有内容
一次性读取文本文件所有内容 public String readFileToString(String fileName) { String encoding = "UTF-8"; ...
- python写文件byte_python 将字节写入文本文件
想在文本模式打开的文件中写入原始的字节数据 将字节数据直接写入文件的缓冲区即可 >>> import sys >>> sys.stdout.write(b'Hell ...
- MATLAB可以进行多种文件操作,包括读取和写入文本、二进制和其他格式的文件,创建和删除文件夹等等
常见的文件操作方法: 读取文本文件 使用 fopen 函数打开文件,然后使用 fscanf 函数读取文件中的数据.例如 fid = fopen('myfile.txt'); data = fscanf ...
最新文章
- linux入门(三)常见Linux指令及其用法
- mysql anyvalue报错_Mysql 的ANY_VALUE()函数和 ONLY_FULL_GROUP_BY 模式
- WebForm中关于DataGrid的20篇经典文章
- TensorFlow patch块划分(transpose and reshape)
- mysql binlog 备份_做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次...
- php没有上级分类的联动,ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单...
- oracle视频教程 任务,Oracle基础教程(两位专家手把手教你完成各种常见任务)
- sklearn库里几种回归模型
- 支付宝拿技术开刀把扫码无情地革掉
- 手机怎么更改ip地址
- 会议室预定管理系统_如何灵活安排会议室,会议预约管理系统帮到你
- java程序设计实验报告代写_代做CS实验报告、代写java c/c++ CS课程设计作业、代写程序作业...
- stol函数在linux下使用,C++中进制转换问题
- CentOS7.6系统安装步骤
- 6月26日云栖精选夜读:成为一名Java高级工程师你需要学什么
- 项目成本管理__成本管理技术__第7条 完工尚需绩效指数(TCPI)
- win7 android usb驱动,在win7系统下安装手机usb驱动软件的教程
- 学物联网必须要知道的云平台ThingsBoard
- C语言使用CUDA中cufft函数做GPU加速FFT运算,与调用fftw函数的FFT做运算速度对比
- 小米多看|变身番茄todo计时,时钟
热门文章
- opencv滤镜-二值化实现黑白滤镜
- 性价比哪家强?富勒G93S光磁微动鼠标深度评测
- java根据word模板导出_java如何根据word模板生成word文档
- 阿里巴巴高级技术专家李浩:千牛开放从云到端
- 防火墙添加ip白名单_如何给防火墙加白名单 防火墙添加ip白名单
- java超简单计算器_Java实验--超级简单的计算器
- [附源码]Nodejs计算机毕业设计交通事故证据交易平台Express(程序+LW)
- 奉劝那些想涨工资的程序员,这些 IT 大神们都在用的网站,你越早知道越好(建议收藏)!!...
- 二层设备与三层设备的区别
- 血色冲锋队洛谷P1332(福建省历届夏令营)