引入System.IO命名空间
1.文件信息
1.1 FileInfo 实例对象名=new FileInfo(string filePath);
filePath参数为文件所在资源路径(Application.data/*Assests*/+“/文件所在文件夹/.../文件名称.文件类型”);
实例对象名.DirectoryName//文件资源路径(不包含文件名);
实例对象名.FullName//文件资源路径(包含文件名);
实例对象名.IsReadOnly/文件是否只读;
实例对象名.Length/返回文件字节码长度;
1.2 实例对象名.MoveTo(Application.data/*Assests*/+“/文件所在文件夹/.../文件名称(新).文件类型”)//文件重命名;
2.读写文件
2.1 File.ReadAllText(string filePath) //读取文件所有行(未经序列化的文件内容);
File.WriteAllText(string filePath,文件内容) //所有文件内容全部写入
2.2 File.ReadAllLines(string filePath) //一行一行从文件中读取(未经反序列化的文件内容),返回值为文件内容对应的数组;
File.WriteAllLines(string filePath,文件内容对应类型的数组)
2.3 File.ReadAllBytes(string filePath) //读取二进制文件,将所有字节码全部读出,返回值为字节码类型的数组;
所以需要将返回字节码数组进行类型转化(原文件内容对应的类型)
例:原文件内容为文本类型 string str=Encoding.Default.GetString(返回的字节码数组);
File.WriteAllBytes(string filePath,字节码数组(将文件内容序列化))
2.4 FileStream 文件流
将创建文件流对象的过程写在using中,会自动的帮助我们释放流所占用的资源。
读取
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Text;
/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class _3_10 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
ReadStreamFile();
}
void ReadStreamFile()
{
string path = Application.dataPath + "/File/f.txt";//文件所在资源路径
using (FileStream fs=new FileStream(path,FileMode.Open,FileAccess.Read))//实例文件流对象(path/*文件所在资源路径*/,FileModel.Open/*文件打开方式*/,FileAccess.Read/*文件可执行的操作*/)
{
byte[] bytes = new byte[fs.Length];//定义字节码数组接收文件流读取的字节码文件的返回值
int length=fs.Read(bytes/*, 0/*读取起始位置*/, bytes.Length/**读取的总长度/*/);//文件读取所有字节码并且返回长度;
string strs= Encoding.Default.GetString(bytes/*,0,bytes.Length*/);//反序列化;转码
print(strs);
fs.Close();//关闭文件流操作对象
}
}
}
写入
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Text;
/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class _3_10 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
WriteStreamFile();
}
void WriteStreamFile()
{
string path = Application.dataPath + "/File/f.txt";
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite))
{
string s = "Hello";
byte[] bytes = Encoding.Default.GetBytes(s);
fs.Write(bytes, 0, bytes.Length);
fs.Flush();//刷新缓存区
fs.Close();
}
}
}
2.5 追加文件内容
File.AppendAllText(string filePath,文件内容)
File.AppendAllLines(string filePath,文件内容对应类型的数组)
3.创建文件
File.Create()
返回值类型是一个FileStream,若在创建文件完毕后未关闭,则显示资源路径共享冲突(文件被占用)
解决方案1:使用FileStram类型对象接收File.Create的返回值,手动关闭,对象名称.Close();
解决方案2:在File.Create()后使用Dispose()( File.Create().Dispose()),将在执行创建完成时自动释放流所占用的资源
解决方案3:使用using(File.Create()),将创建文件流对象的过程写在using中,会自动的帮助我们释放流所占用的资源。
4.FileStream和File使用的场景
将水缸A的满水,倒入到水缸B的空缸中,有两种方法:
1)扛起整个水缸A,然后象霸王一样倒入到水缸B: 痛快干脆,但得力气大。
2)牵一水管由水缸A导流到水缸B中: 温柔便巧,不需要费大力。
File类读写文件,犹如方法1,全部搬运倾泄,耗费内存。只适合小文件操作。
FileStream类读写文件,犹如方法2,小量多次便捷高效,适宜大小文件操作。