【Unity 笔记】文件的写入与读取(1)

来源:互联网 发布:简单java小程序代码 编辑:程序博客网 时间:2024/05/23 19:27

引言:

在Unity3D中,我们经常会需要在本地或者服务器上读取游戏数据,这几篇blog记录下目前知道的两种读取数据表的方式。一种是在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等比较方便。给个别人的参考:这


文件的创建与写入


首先我们看看怎么在Unity中创建一个文件吧=,= 


[csharp] view plain copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using System.IO;  
  5.   
  6. public class FileOperate : MonoBehaviour {  
  7.   
  8.     public void WriteFileByLine(string file_path,string file_name,string str_info)  
  9.     {  
  10.         StreamWriter sw;  
  11.         if(!File.Exists(file_path+"//"+file_name))  
  12.         {  
  13.             sw=File.CreateText(file_path+"//"+file_name);//创建一个用于写入 UTF-8 编码的文本  
  14.             Debug.Log("文件创建成功!");  
  15.         }  
  16.         else  
  17.         {  
  18.             sw=File.AppendText(file_path+"//"+file_name);//打开现有 UTF-8 编码文本文件以进行读取  
  19.         }  
  20.         sw.WriteLine(str_info);//以行为单位写入字符串  
  21.         sw.Close ();  
  22.         sw.Dispose ();//文件流释放  
  23.     }  
  24.   
  25.     void Start()  
  26.     {  
  27.         WriteFileByLine (Application.persistentDataPath,"my_newfile.txt","信息");  
  28.     }  
  29. }  


代码很简单,有几个地方需要注意:
  • File.CreatText()创建的是UTF-8编码格式的文本,而且传的参数的路径包含了文件的名称。
  • File.AppendText()是打开现有的UTF-8文本,在文本内容后面衔接后操作。
  • Application.persistentDataPath这是系统给出的一条默认路径,Win7下的路径是C:\Users\foxfirm\AppData\LocalLow\???后面的如果没设置的话一般是DefaultCompany,foxfirm当然就是你自己的用户名啦,其他移动客户端的话我也不太清楚。
拓展:
/*------------------------------------------------------------------------------------------------------------------------------------
上面采用的是File类的方式,下面用FileInfo类的方式进行改写,可以观察其异同:
[csharp] view plain copy
  1. public void WriteFileByLine(string file_path,string file_name,string str_info)  
  2.     {  
  3.         StreamWriter sw;  
  4.         FileInfo file_info = new FileInfo (file_path+"//"+file_name);  
  5.         if(!file_info.Exists)  
  6.         {  
  7.             sw=file_info.CreateText();//创建一个用于写入 UTF-8 编码的文本  
  8.             Debug.Log("文件创建成功!");  
  9.         }  
  10.         else  
  11.         {  
  12.             sw=file_info.AppendText();//打开现有 UTF-8 编码文本文件以进行读取  
  13.         }  
  14.         sw.WriteLine(str_info);  
  15.         sw.Close ();  
  16.         sw.Dispose ();//文件流释放  
  17.     }  
FileStream类不是很熟,不过貌似可以这样写:
[csharp] view plain copy
  1. public void WriteFileByLine(string file_path,string file_name,string str_info)  
  2.     {  
  3.         FileStream file_stream;  
  4.         if(!File.Exists(file_path+"//"+file_name))  
  5.         {  
  6.             file_stream=File.Create(file_path+"//"+file_name);//创建一个用于写入 UTF-8 编码的文本  
  7.             Debug.Log("文件创建成功!");  
  8.         }  
  9.         else  
  10.         {  
  11.             file_stream=File.Open(file_path+"//"+file_name,FileMode.Open);//打开现有 UTF-8 编码文本文件以进行读取  
  12.         }  
  13.   
  14.         byte[] info = UTF8Encoding.UTF8.GetBytes (str_info);  
  15.         file_stream.Write (info, 0, info.Length);  
  16.         file_stream.Close ();  
  17.         file_stream.Dispose ();  
  18.     }  
貌似只能用UTF-8,关于中文的编码格式。unicode和UTF-8的关系好像是UTF-8是unicode的一种为了在计算机中实现而产生的一种再编码方式,具体我也不是很了解:-)
-------------------------------------------------------------------------------------------------------------------------------*/

文件的读取

上面已经创建了文件了,接下来就是怎么去读取获得它里面的数据了,是不是挺激动呀~
[csharp] view plain copy
  1. public List<string> ReadFileList(string file_path,string file_name)  
  2.     {  
  3.         StreamReader sr;  
  4.         if(File.Exists(file_path+"//"+file_name))  
  5.         {  
  6.             sr=File.OpenText(file_path+"//"+file_name);  
  7.         }  
  8.         else  
  9.         {  
  10.             Debug.LogWarning("Not find files!");  
  11.             return null;  
  12.         }  
  13.         List<string> list = new List<string> ();  
  14.         string str;  
  15.         while((str=sr.ReadLine())!=null)  
  16.             list.Add(str);//加上str的临时变量是为了避免sr.ReadLine()在一次循环内执行两次  
  17.         sr.Close ();  
  18.         sr.Dispose ();  
  19.         return list;  
  20.     }  


这里是用list来存读取的数据,以行为单位进行存储

文件的删除就直接可以调用File.Delete("路径名") 就可以啦~
原创粉丝点击