Unity 数据存储自总

数据传输要 using System.IO (I==>Input,O==>Output) IO流:指数据输入输出流

传输txt要 using System.Text

处理文件夹:

类名:Directory

Str = "\n" :默认情况下(\)符号在字符串表示转义符

Str = @"\n":如果在前面加@符号,那么(\)将作为字符存在,不代表转义符,即@符号用于取消转义

Directory.GetCurrentDirectory(); 当前应用程序绝对路径

Directory.Exists(@"C:\hehe\新建文件夹") ==> 返回bool值,判断文件夹路径是否存在

Directory.GreateDirectory(@"C:\hehe\新建文件夹") ==> 创建文件夹

Directory.Delete(@"C:\hehe\新建文件夹", true) ==> 删除文件夹

Directory.Move(@"C:\hehe\新建文件夹",@"C:\lol\新建文件夹") ==>移动文件夹,也可以用这个方法实现文件夹重命名

string[] files = Directory.GetFiles(@"C:\hehe\新建文件夹") ==> 获取路径文件夹下的所有文件

string[] dires = Directory.GetDirectories(@"C:\hehe\新建文件夹") ==> 获取路径下的所有文件夹

类名:File

File.Delete(@"C:\hehe\新建文件夹\hehe.jpg") ==> 删除指定文件,注意文件后缀

File.Move(@"C:\hehe\新建文件夹\hehe.jpg") ==> 移动指定文件

File.Copy(@"C:\hehe\新建文件夹\hehe.jpg",@"C:\hehe\新建文件夹\lol.jpg") ==>拷贝,前后名字可以不一样,后缀也可以不一样

FileStream fs = File.Create(@"C:\hehe\新建文件夹\haha.txt") ==> 创建文件

File.Exists(@"C:\hehe\新建文件夹\haha.txt") ==> 返回一个bool,判断文件是否存在

FileMode枚举类型:

Open 打开一个已有文件

Create 创建一个新文件,如果存在旧覆盖的方式覆盖掉旧文件

GreateNew 创建一个新文件,文件必须是不存在的

OpenOrCreate 文件存在则打开,否则创建一个新文件

Append(追加) 在文本最后面开始==>即把游标放在文本最后(默认一般是打开文件时,游标在最前面)

FileSteam 类

FileStream.Read(byte[](读取出来的数据放这里),int(从字节数组第几位开始存),bytes.lenght(提供多少个位置来存放读取的内容))

FileStream.Write(byte[](写入文件的内容转成字节数组)),int(从字节数组第几位开始写入),bytes.lenght(从字节数组中写入多少位))

FileStream.Seek(0(决定向前移动还是向后移动),seekOrigin(从什么位置开始移动))

三个字节代表一个中文

读取文件流程

using System.IO;
using System.Text;


.......


public const string filePath = @"C:\hehe\lol.txt";
public const int BUFF_SIZE = 10;
public string msg = "hehehehehe";

if (File.Exists(filePath)) //文件是否存在
        {
            FileStream fs = File.Open(filePath,FileMode.Open);  //存在就打开
            byte[] bytes = new byte[BUFF_SIZE];
            fs.Read(bytes, 0, bytes.Length); //字节数组,从字节数组第几位开始存,提供多少位置存
            string str = new UTF8Encoding().GetString(bytes);//把字节数组转成字符串
            Debug.Log(str);
            fs.Close();                                //只要打开,结束使用时就必须CLOSE和
                                                                                 DISPOSE
            fs.Dispose();
        }
        else
        {
            FileStream fs = File.Create(filePath);    //不存在就创建
            byte[] bytes = new byte[BUFF_SIZE];
            bytes = new UTF8Encoding().GetBytes(msg);//把字符串转成字节数组
            fs.Write(bytes, 0, bytes.Length);
            Debug.Log("save");
            fs.Close();
            fs.Dispose();
        }

StreamReader 类 (文本读取器(只能读文本))

StreamReader sr = new StreamReader(path(路径),System.Text.Ecoding.UTF8(格式));

string str = sr.ReadLine();(只读一行)

string str = sr.ReadToEnd();(全读)

StreamWriter 类 (文本写入(写入文本))

StreamWriter sw = new StreamWriter(file(路径))

StreamWriter sw = new StreamWriter(file(路径),true(是否追加(游标位置)),System.Text.Encoding.UTF8(格式))

sw.Write("hehe");

//从字节数组转成图片
Texture2D t = new Texture2D(512,512);

t.LoadImage(bytes); ===>返回一个bool值判断转换是否成功,如果成功把值给t

return t;

WWW 类

加载网络方法: @"https:// baidu.com/xxx/xxx/fafa.gif"

加载本地方法: @"file:// C:\桌面\111.png"

写入协程里==> while(!www.isDone){www.progress ...还有多久完成  .....yield return null } 每帧做一次 或者yield return www;

IEnumerator LoadTextureByHttp
{
 
   WWW www = new WWW(filePath);
   yield return www;
   if(www! = null && string.IsNullOrEmpty(www.error))
   {

      image.texture = www.texture;
      image.SetNaticeSize();
   
   }
   else  Debug.LogError("GG");

}



Json 使用固定文本格式来存储和表示数据

Json键值对:使用(:)冒号来区分,冒号右边的部分是"键",键都是使用引号("")包裹的字符串,每个键值对之间用逗号分隔,

例: { "name":"ling" }

花括号:表示对象 ==>花括号中每一个键值对都表示这个对象里的变量和变量所对应的值,键名对应对象里的变量名,值对应这个变量名为键名的这个变量所对应的值

方括号:表示数组 ==> 例: {"table":[1,2,3]} ==>数组里是值类型

值的取值:

数字(整数或浮点)

字符串(用双引号包裹)

bool(true,false)

数组(在方括号中)

对象(花括号中)

null

json初学者输入易犯错误:

所有("")都是英文,不要出现中文

花括号与方括号前后是否能对应上

最后一个数据后面是否有逗号

差错直接百度json在线解析

{
	"table": [
		[2, 4, 5],
		[1, 1, 1]
	],
	"name": "ling"
}

JsonUtility.ToJson() ==>括号里填object类型的东西 例如 一个类 

JsonUtility.ToJson(object,bool) ==>bool指是否带有格式的转化

这里要转成json必须要序列化

序列化:把对象转换成字节序列的过程称为序列化

反序列化:把字节序列转换成对象的过程

类/结构体名上面空的一行上加[System.Serializable]  ,变量名上面一行加[SerializeField] 后才表示这个类/结构体或这个变量名是可以序列化的,然后才能用ToJson方法

枚举不用serializable

JsonUtility.FromJson<object>(string(json格式的字符串,一般是从json文件中读取出来的字符串))

MyClass myClass = new MyClass();      myClass = JsonUtility.FromJson<MyClass>(jsonStr);

常见报错:

Argument Exception json格式错了

NullReferenceException 类未加序列化标识

除了Resources文件夹外的其他几个重要文件夹及其各平台路径:

StreamingAssets

PCWIN/MAC path = Application.dataPath + "/StreamingAssets";

IOS  path = Application.dataPath + "/Raw";

Android path = "jar:file://" + Application.dataPath + "!/assets/";  ==>不要用StreamReader读,只能用WWW读

Application.persistentDataPath 一般可以用来放存档

WIN path = C:/Users/xxx/AppData/LocalLow/CompanyName/ProductName

Mac path =  /Users/xxx/Library/Caches/CompanyName/Product Name

IOS path = Application/xxxxxxxx/Documents

Android path =  /data/data/xxx.xxx.xxx/files   或   /Android/data/com.company.xxx/files

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值