Unity文件的写入与读取(1)
引言:
在Unity3D中,我们经常会需要在本地或者服务器上读取游戏数据,而常见的读取数据表的方式有两种,一种是在Resource目录下通过TextAsset读取,一种是通过文件流的方式读取。Resource 下的数据是不能修改的,比如单机游戏的装备,NPC数据等;而文件流的方式是存和取数据,比如保存游戏进度等。
下面来说说文件流的方式吧:
因为文件流的读取方式需要用的.Net下的一些类函数,首先得简单知道这些函数的定义和用法
File类和FileInfo类的介绍:
File类和FileInfo类都是提供用于创建、复制、删除、移动和打开文件的方法,一个是静态的,一个是实例方法。简单来说,就是Flie类可以直接通过类名调用其中的某些函数,而FileInfo类需要先实例化一个对象,再通过对象调用函数。一般来说,如果是对文件进行少量的操作,则建议用File类,如果是对文件进行大量的存取操作,建议用FileInfo类,具体原因参照这 。 这里是官方的文档,File类, FileInfo类。
FileStream类和StreamWriter,StreamReader类的简单介绍:
FileStream类是一个操作类,FileStream 对象表示在磁盘或网络路径指向文件的流,这个类提供了在文件中读写字节的方法。简单来说就是这个Filestream这个文件流对 .txt等文件读写内容时需要使用的一个工具。如果File类是一个总的文件的话,那么fileStream类就是对文件进行操作的笔。 FileStream类和StreamWriter,StreamReader类的区别在于FileStream类操作的是字节和字节数组,而StreamWriter等类操作的是字符数据。StreamWriter类操作的只能是文本类型的,而FileStream类的对象可以是任何类型的。操作文本的话用StreamWriter等比较方便。
文件的创建与写入
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","信息"); } }
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 ();//文件流释放 }
public void WriteFileByLine(string file_path,string file_name,string str_info) { FileStream file_stream; if(!File.Exists(file_path+"//"+file_name)) { file_stream=File.Create(file_path+"//"+file_name);//创建一个用于写入 UTF-8 编码的文本 Debug.Log("文件创建成功!"); } else { file_stream=File.Open(file_path+"//"+file_name,FileMode.Open);//打开现有 UTF-8 编码文本文件以进行读取 } byte[] info = UTF8Encoding.UTF8.GetBytes (str_info); file_stream.Write (info, 0, info.Length); file_stream.Close (); file_stream.Dispose (); }
public List<string> ReadFileList(string file_path,string file_name) { StreamReader sr; if(File.Exists(file_path+"//"+file_name)) { sr=File.OpenText(file_path+"//"+file_name); } else { Debug.LogWarning("Not find files!"); return null; } List<string> list = new List<string> (); string str; while((str=sr.ReadLine())!=null) list.Add(str);//加上str的临时变量是为了避免sr.ReadLine()在一次循环内执行两次 sr.Close (); sr.Dispose (); return list; }
如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引