【超详细】C#自定义工具类-FileHelper文件工具类
目录
FileHelper工具类
1.主要功能
1.1.文件路径获取
1.2.文本文件操作
1.3.二进制文件操作
1.4.JSON文件操作
1.5.CSV文件操作
1.6.文件常规操作
2.完整代码
3.测试
4.总结
本篇文章来分享一下FileHelper工具类,FileHelper类用于文件操作,主要为Unity项目提供了丰富的文件处理功能,涵盖多种文件类型和操作场景。
FileHelper工具类
1.主要功能
1.1.文件路径获取
获取特定目录下文件路径的方法:
●GetFileStreamingAssetsPath:获取StreamingAssets目录下文件的路径
●GetFilePersistentPath:获取PersistentDataPath目录下文件的路径
/// <summary>
/// 获取StreamingAssets目录下的文件路径
/// </summary>
/// <param name="fileName">文件名(包含扩展名)</param>
/// <returns>完整的文件路径</returns>
public static string GetFileStreamingAssetsPath(string fileName)
{return Path.Combine(Application.streamingAssetsPath, fileName);
}
/// <summary>
/// 获取PersistentDataPath目录下的文件路径
/// </summary>
/// <param name="fileName">文件名(包含扩展名)</param>
/// <returns>完整的文件路径</returns>
public static string GetFilePersistentPath(string fileName)
{return Path.Combine(Application.persistentDataPath, fileName);
}
1.2.文本文件操作
支持文本文件的读写:
●WriteTextFile:向指定路径写入文本内容,可指定文件模式(默认创建新文件或覆盖已有文件),会自动创建不存在的目录
●ReadTextFile:从指定路径读取文本内容,返回读取是否成功并通过out参数输出内容
/// <summary>
/// 写入文本文件
/// </summary>
/// <param name="path">文件完整路径</param>
/// <param name="content">要写入的内容</param>
/// <param name="mode">文件打开模式(默认:创建新文件,覆盖现有文件)</param>
/// <returns>是否写入成功</returns>
public static bool WriteTextFile(string path, string content, FileMode mode = FileMode.Create)
{try{//获取文件所在目录string directory = Path.GetDirectoryName(path);//确保目录存在if (!Directory.Exists(directory)){Directory.CreateDirectory(directory);}//使用UTF8编码写入文件using (FileStream fs = new FileStream(path, mode, FileAccess.Write))using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8)){sw.Write(content);}return true;}catch (Exception e){Debug.LogError($"写入文本文件失败: {e.Message}");return false;}
}
/// <summary>
/// 读取文本文件
/// </summary>
/// <param name="path">文件完整路径</param>
/// <param name="content">输出的文件内容</param>
/// <returns>是否读取成功</returns>
public static bool ReadTextFile(string path, out string content)
{content = "";try{if (!File.Exists(path)){Debug.LogWarning($"读取文本文件失败: 文件不存在,路径: {path}");return false;}using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)){content = new StreamReader(fs).ReadToEnd();}return true;}catch (Exception e){Debug.LogError($"读取文本文件异常: {e.Message}");return false;}
}
1.3.二进制文件操作
支持二进制数据的读写:
●WriteBinaryFile:将字节数组写入指定路径的二进制文件,会验证数据有效性并自动创建目录
●ReadBinaryFile:从指定路径读取二进制文件内容,返回字节数组
/// <summary>
/// 写入二进制文件
/// </summary>
/// <param name="path">文件完整路径</param>
/// <param name="data">二进制数据</param>
/// <param name="mode">文件打开模式(默认:创建新文件,覆盖现有文件)</param>
/// <returns>是否写入成功</returns>
public static bool WriteBinaryFile(string path, byte[] data, FileMode mode = FileMode.Create)
{try{//验证数据有效性if (data == null || data.Length == 0){Debug.LogWarning("写入二进制文件失败: 数据为空");return false;}//确保目录存在string directory = Path.GetDirectoryName(path);if (!Directory.Exists(directory)){Directory.CreateDirectory(directory);}//写入二进制数据using (FileStream fs = new FileStream(path, mode, FileAccess.Write)){fs.Write(data, 0, data.Length);}return true;}catch (Exception e){Debug.LogError($"写入二进制文件失败: {e.Message}");return false;}
}
/// <summary>
/// 读取二进制文件
/// </summary>
/// <param name="path">文件完整路径</param>
/// <param name="data">输出的二进制数据</param>
/// <returns>是否读取成功</returns>
public static bool ReadBinaryFile(string path, out byte[] data)
{data = null;try{if (!File.Exists(path)){Debug.LogWarning($"读取二进制文件失败: 文件不存在,路径: {path}");return false;}//读取二进制数据using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)){data = new byte[fs.Length];fs.Read(data, 0, data.Length);}return true;}catch (Exception e){Debug.LogError($"读取二进制文件异常: {e.Message}");return false;}
}
1.4.JSON文件操作
基于Unity的JsonUtility实现JSON序列化和反序列化:
●WriteJsonFile:将对象序列化为JSON字符串并写入文件,支持格式化输出
●ReadJsonFile:从文件读取JSON字符串并反序列化为指定类型的对象
/// <summary>
/// 写入JSON文件
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="path">文件完整路径</param>
/// <param name="obj">要序列化的对象</param>
/// <param name="prettyPrint">是否格式化输出(默认:true)</param>
/// <returns>是否写入成功</returns>
public static bool WriteJsonFile<T>(string path, T obj, bool prettyPrint = true)
{try{if (obj == null){Debug.LogWarning("写入JSON文件失败: 对象为空");return false;}//序列化为JSON字符串string jsonData = JsonUtility.ToJson(obj, prettyPrint);return WriteTextFile(path, jsonData);}catch (Exception e){Debug.LogError($"写入JSON文件失败: {e.Message}");return false;}
}
/// <summary>
/// 读取JSON文件
///