(client) feat:添加文件管理类Utils.FileHandler
This commit is contained in:
BIN
Client/Assets/Plugins/Newtonsoft.Json.dll
Normal file
BIN
Client/Assets/Plugins/Newtonsoft.Json.dll
Normal file
Binary file not shown.
2
Client/Assets/Plugins/Newtonsoft.Json.dll.meta
Normal file
2
Client/Assets/Plugins/Newtonsoft.Json.dll.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13521751152941a6835e2c81be4e6137
|
157
Client/Assets/Scripts/Utils/FileHandler.cs
Normal file
157
Client/Assets/Scripts/Utils/FileHandler.cs
Normal file
@ -0,0 +1,157 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Utils
|
||||
{
|
||||
public static class FileHandler
|
||||
{
|
||||
// 保存文件的默认文件夹路径
|
||||
private const string FolderPath = "save";
|
||||
|
||||
/// <summary>
|
||||
/// 初始化文件夹
|
||||
/// </summary>
|
||||
static FileHandler()
|
||||
{
|
||||
if (!Directory.Exists(FolderPath))
|
||||
{
|
||||
Directory.CreateDirectory(FolderPath);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存单个类为 JSON 文件
|
||||
/// </summary>
|
||||
/// <param name="obj">要保存的类对象</param>
|
||||
/// <param name="fileName">可选的文件名(不包括扩展名)</param>
|
||||
public static bool SaveFile<T>(T obj, string fileName = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 如果未提供文件名,则使用类名作为文件名
|
||||
if (string.IsNullOrEmpty(fileName))
|
||||
{
|
||||
fileName = typeof(T).Name;
|
||||
}
|
||||
|
||||
// 构建完整的文件路径
|
||||
var filePath = Path.Combine(FolderPath, fileName + ".json");
|
||||
|
||||
// 将对象序列化为 JSON 字符串
|
||||
var jsonContent = JsonConvert.SerializeObject(obj, Formatting.Indented);
|
||||
|
||||
// 写入文件
|
||||
File.WriteAllText(filePath, jsonContent);
|
||||
|
||||
Debug.Log($"Saved file: {filePath}");
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Failed to save file: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从 JSON 文件读取单个类
|
||||
/// </summary>
|
||||
/// <param name="fileName">文件名(不包括扩展名)</param>
|
||||
public static T LoadFile<T>(string fileName)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 构建完整的文件路径
|
||||
var filePath = Path.Combine(FolderPath, fileName + ".json");
|
||||
|
||||
// 检查文件是否存在
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
Debug.LogError($"File not found: {filePath}");
|
||||
return default;
|
||||
}
|
||||
|
||||
// 读取文件内容
|
||||
var jsonContent = File.ReadAllText(filePath);
|
||||
|
||||
// 反序列化为指定类型的对象
|
||||
var obj = JsonConvert.DeserializeObject<T>(jsonContent);
|
||||
|
||||
Debug.Log($"Loaded file: {filePath}");
|
||||
return obj;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Failed to load file: {ex.Message}");
|
||||
return default;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打包多个类并保存为一个存档文件
|
||||
/// </summary>
|
||||
/// <param name="archiveName">存档文件名(不包括扩展名)</param>
|
||||
/// <param name="objects">要保存的类对象字典</param>
|
||||
public static bool SaveArchive(string archiveName, Dictionary<string, object> objects)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 构建完整的文件路径
|
||||
var filePath = Path.Combine(FolderPath, archiveName + ".archive.json");
|
||||
|
||||
// 将字典中的对象序列化为 JSON
|
||||
var jsonContent = JsonConvert.SerializeObject(objects, Formatting.Indented);
|
||||
|
||||
// 写入文件
|
||||
File.WriteAllText(filePath, jsonContent);
|
||||
|
||||
Debug.Log($"Saved archive: {filePath}");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Failed to save archive: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从存档文件中读取多个类
|
||||
/// </summary>
|
||||
/// <param name="archiveName">存档文件名(不包括扩展名)</param>
|
||||
public static Dictionary<string, object> LoadArchive(string archiveName)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 构建完整的文件路径
|
||||
var filePath = Path.Combine(FolderPath, archiveName + ".archive.json");
|
||||
|
||||
// 检查文件是否存在
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
Debug.LogError($"Archive not found: {filePath}");
|
||||
return null;
|
||||
}
|
||||
|
||||
// 读取文件内容
|
||||
var jsonContent = File.ReadAllText(filePath);
|
||||
|
||||
// 反序列化为字典
|
||||
Dictionary<string, object> objects = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonContent);
|
||||
|
||||
Debug.Log($"Loaded archive: {filePath}");
|
||||
return objects;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Failed to load archive: {ex.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
2
Client/Assets/Scripts/Utils/FileHandler.cs.meta
Normal file
2
Client/Assets/Scripts/Utils/FileHandler.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3b277e204485b3b47b6de15948e9156e
|
Reference in New Issue
Block a user