这里我们先理解一下什么是序列化和反序列化。简单的来说序列化就是把其他类型转化为字节序列类型(byte[]),这种类型的转换就是序列化。而反序列化就是把字节序列类型转化为对象类型。这里对象类型可以是多样的,一般都是值类型的转换。甚至都可以是图片,以及其他对象进行序列化,只不过会出现乱码的情况。
IO文件的创建:
1、第一种方式是通过外部去创建
2、通过代码的方式创建
string s = Application.dataPath+"文件路径";
对文件信息的访问:
FileInfo f = new FileInfo(Application.dataPath + "/flod/b.text");
print(f.Name);//文件名称
if (!f.Exists)//不存在就创建b
{
f.Create();
}f.MoveTo(Application.dataPath + "/flod/c.text");//把b文件重命名为c
IO文件的操作:
File.WriteAllText()写入文件
string s1 = "Hello World";
File.WriteAllText(Application.dataPath + "/flod/b.text", s1);//把s1放入文件b中 string[] n1 = { "男", "女" };
File.WriteAllLines(Application.dataPath + "/flod/b.text", n1);//以多行的形式把s1内容覆盖为n1的内容 string s3 = "变成";
byte[] s4 = Encoding.UTF8.GetBytes(s3);//序列化内容
File.WriteAllBytes(Application.dataPath + "/flod/b.text", s4);//以字节的形式存入文本File.AppendAllText(Application.dataPath + "/flod/b.text",“\n123”)//不覆盖之前的把内容去添加新内容在之前的文件上
读取文本信息:
File.ReadAllText();读取所有行的信息
//读取所有行数据
string s = Application.dataPath + "/flod/b.text";
string s1 = File.ReadAllText(s);
print(s1);
File.ReadAllLines();分行读取信息,一行一行的读取信息,这里需配合换行符进行使用
//一行一行的读取所有的信息
string s = Application.dataPath + "/flod/b.text";
string[] s2 = File.ReadAllLines(s);
print(s2)
File.ReadAllBytes()反序列化读取全部行信息。
//反序列化读取文本所有信息
byte[] s3 =File.ReadAllBytes(Application.dataPath + "/flod/bg.jpg");
string s4 =Encoding.UTF8.GetString(s3);
print(s4);
文件流形式读文件与写文件:
方法1:
文件流读取文件:
void FileStreamRead()//文件流形式读的形式,反序列化
{
//文件路径
string n = Application.dataPath + "/flod/b.text";
if (File.Exists(n))//判断是否存在
{
//创建文件流构造函数,FileMode.Open打开文件流,读取内容
//new FileStream(文件路径,文件的操作形式,文件的读取)
using (FileStream fs = new FileStream(n, FileMode.Open, FileAccess.ReadWrite))
{
//反序列化
//获取文件的长度,并进行序列化管理
byte[] b = new byte[fs.Length];
//获取的是包含文件名称,以及文件内容的的所有字节长度
int lenth = fs.Read(b, 0, b.Length);
//反序列化操作,把获取的序列化文件b,进行反序列化操作,进行读取里面的文本内容
string s =Encoding.UTF8.GetString(b, 0, lenth);
print(s);
fs.Close();//关闭文件
}
}
}
文件流写入文件:
void FileStreamWrite()//文件流形式写的形式,序列化操作
{
//查找文件
string n = Application.dataPath + "/flod/b.text";
if (File.Exists(n))//判断文件是否存在
{
//创建文件流构造函数,FileMode.Create写入文件,读取内容
//new FileStream(文件路径,文件的操作形式,文件的读取)
using (FileStream fs=new FileStream(n, FileMode.Create, FileAccess.ReadWrite))
{
//需要写入文件的内容
string s = "Is my God ";
//对写入文件的内容进行序列化操作
byte[] s1 =Encoding.UTF8.GetBytes(s);
//写入文件
fs.Write(s1, 0, s1.Length);
fs.Flush();//刷新缓存区
fs.Close();//关闭文件
}
}
}
方法2:
string s = Application.dataPath + "/flod/b.text";
if (File.Exists(s))
{
//读的操作,创建一个读的构造函数
using (StreamReader reader = new StreamReader(s, Encoding.UTF8))
{
while (true)
{
//读取一行内容,在死循环里读取文件里所有的文件
string n = reader.ReadLine();
if (n == null)//当读取的内容为空时跳出循环
{
break;
}
}
reader.Close();
}
//写入的操作,创建一个写入的构造函数
using (StreamWriter writer=new StreamWriter(Application.dataPath + "/flod/b.text"))
{
string s = "Hello World";
//创建一个WriteLine()写入的方法,把内容写入文件内
writer.WriteLine(s);
writer.WriteLine(new char[]{'2','3'});
writer.Close();
}
}
}