diff --git a/Assets/JsonIOTools/JsonIOUtility.cs b/Assets/JsonIOTools/JsonIOUtility.cs index 2425f66..e0f8948 100644 --- a/Assets/JsonIOTools/JsonIOUtility.cs +++ b/Assets/JsonIOTools/JsonIOUtility.cs @@ -1,38 +1,51 @@ using System; using System.IO; -using System.Collections; using System.Collections.Generic; using UnityEngine; -using System.Configuration; -using System.Linq; using LitJson; using System.Text; +namespace JXSoft +{ + /// + /// how to use: + /// JsonIOUtitlty jsonIO = new JsonIOUtility(); or JsonIOUtitlty jsonIO = new JsonIOUtility("myJsonFile"); + /// //Save data to native json file; + /// jsonIO.setData(TypeClass object); + /// jsonIO.SaveToJsonFile(); + /// //Read data to native json file; + /// jsonIO.getData(); + /// - -namespace JXSoft { - public class JsonIOUtility + public class JsonIOUtility { private string DefaultJsonFile = ""; private JsonIOCContainer jsonContainer = new JsonIOCContainer(); private JsonData mInstance = new JsonData(); - public JsonIOUtility() { + public JsonIOUtility() + { loadJsonFile(); } + public JsonIOUtility(string fileName) + { + loadJsonFile(fileName); + } //Setting FileName and Path(Default using Application.persistentDataPath) - public void setLoadFile(string fileName) + private void setLoadFile(string fileName) { - DefaultJsonFile = Application.persistentDataPath +"/" + fileName + ".json"; + DefaultJsonFile = Application.persistentDataPath + "/" + fileName + ".json"; Debug.Log(DefaultJsonFile); } #region load //Load From File - public void loadJsonFile() { + public void loadJsonFile() + { loadJsonFile("JsonConfig"); } public void loadJsonFile(string fileName) { + jsonContainer.Clear(); setLoadFile(fileName); if (!File.Exists(DefaultJsonFile)) { @@ -48,9 +61,11 @@ namespace JXSoft { #region save //Save to local - public void SaveToJsonFile() { + public void SaveToJsonFile() + { setData(new JsonIOUtilitySaveDate()); - foreach (Type type in jsonContainer.getInstance().Keys) { + foreach (Type type in jsonContainer.getInstance().Keys) + { string data = JsonMapper.ToJson(jsonContainer.getInstance()[type]); mInstance[type.ToString()] = JsonMapper.ToObject(data); } @@ -64,28 +79,45 @@ namespace JXSoft { } #endregion - //Loading FileList From Folder(Default using Application.persistentDataPath) - public void loadFileList() { + #region fileListOpreate + private DataDirectory dataDirectory; + //Loading FileList From Folder(Default using Application.persistentDataPath) + public void loadFileList() + { + GetDataDirectoryQuery getDirectory = new GetDataDirectoryQuery(Application.persistentDataPath); + dataDirectory = getDirectory.DoQuery(); } public void loadFileList(string path) { - + if (!Directory.Exists(Application.persistentDataPath + "/" + path)) + { + Directory.CreateDirectory(Application.persistentDataPath + "/" + path); + } + GetDataDirectoryQuery getDirectory = new GetDataDirectoryQuery(Application.persistentDataPath, path); + dataDirectory = getDirectory.DoQuery(); } - + public DataDirectory GetDataDirectory() + { + return dataDirectory; + } + #endregion #region Save&Read interface - public void setData(TData data) where TData : class { + public void setData(TData data) where TData : class + { jsonContainer.Register(data); } - public TData getData() where TData : class,new() + public TData getData() where TData : class, new() { TData data = jsonContainer.Get(); - if (data == null) { + if (data == null) + { var key = typeof(TData); if (mInstance.ContainsKey(key.ToString())) { data = JsonMapper.ToObject(mInstance[key.ToString()].ToJson()); + jsonContainer.Register(data); } else Debug.LogWarning("No Such Data"); @@ -96,6 +128,7 @@ namespace JXSoft { } + #region DataTime /// /// Every Time Create&Save Recording this Time /// @@ -103,7 +136,8 @@ namespace JXSoft { { public long timeStamp; public string timeStr; - public JsonIOUtilitySaveDate() { + public JsonIOUtilitySaveDate() + { timeStamp = DateUtil.getTimeStamp(); timeStr = DateUtil.getFullDateMsg(); } @@ -125,7 +159,9 @@ namespace JXSoft { return Convert.ToInt64(ts.TotalSeconds); } } + #endregion + #region IOCContainer /// /// IOC For Json /// @@ -158,9 +194,148 @@ namespace JXSoft { return null; } - public Dictionary getInstance() { + public Dictionary getInstance() + { return mInstances; } + public void Clear() + { + mInstances.Clear(); + } + } + #endregion + + + //存放当前目录信息(包括文件夹以及Json存档,如果以后相加新模块在结构类里添加新的list即可) + public class DataDirectory + { + //当前的目录 + public string directoryName; + public string absPathName = ""; + //如果有父级 + private string parentsPathName; + //当前目录包含的文件夹名称 + public List childDirectoryNames; + //当前目录包含的JsonFile + public List childJsonFile; + public DataDirectory(string directoryName, List childDirectoryNames, List childVideoNames) + { + this.directoryName = directoryName; + this.childDirectoryNames = childDirectoryNames; + this.childJsonFile = childVideoNames; + this.absPathName = ""; + } + public DataDirectory(string directoryName, string absPath, List childDirectoryNames, List childJsonFile) + { + this.directoryName = directoryName; + this.childDirectoryNames = childDirectoryNames; + this.childJsonFile = childJsonFile; + this.absPathName = absPath; + } + + //测试用,结构化输出 + public string toString() + { + string msg = ""; + msg += "Path:\n" + directoryName + "\n"; + msg += "AbsPath:\n" + absPathName + "\n"; + msg += "ParentPath:\n" + getParentPath() + "\n"; + msg += "Directroy:\n"; + foreach (string s in childDirectoryNames) + { + msg = msg + s + "|"; + } + msg += "\nJsonFile:\n"; + foreach (string s in childJsonFile) + { + msg = msg + s + "|"; + } + return msg; + } + + public string getAbsPath() + { + return absPathName + "/"; + } + + public string getParentPath() + { + parentsPathName = getParentPathWithPath(directoryName); + return parentsPathName; + } + public string getAbsParentPath() + { + //存在多级目录的 + return getParentPathWithPath(absPathName); + } + private string getParentPathWithPath(string originPath) + { + string parentsPath_ = ""; + string[] dirArray = originPath.Split('/'); + dirArray[dirArray.Length - 1] = ""; + foreach (string dir in dirArray) + { + if (!"".Equals(parentsPath_) && !"".Equals(dir)) + { + parentsPath_ += "/"; + } + parentsPath_ += dir; + } + if (parentsPath_.Equals("/")) + { + parentsPath_ = ""; + } + return parentsPath_; + } + } + + #region Query + public class GetDataDirectoryQuery + { + //当前目录名称 + private string directoryName; + private string absPathName = ""; + public GetDataDirectoryQuery(string directoryName) + { + this.directoryName = directoryName; + } + public GetDataDirectoryQuery(string directoryName, string absPathName) + { + this.directoryName = directoryName + "/" + absPathName; + this.absPathName = absPathName; + } + public DataDirectory DoQuery() + { + List childDirectoryNames = new List(); + List childJsonFileNames = new List(); + DirectoryInfo dirInfo = new DirectoryInfo(directoryName); + FileInfo[] fileInfos = dirInfo.GetFiles(); + DirectoryInfo[] directroyInfos = dirInfo.GetDirectories(); + //------------------------getDirectoryNames----------------// + foreach (DirectoryInfo di in directroyInfos) + { + childDirectoryNames.Add(di.Name); + } + //------------------------getVideoNames----------------// + for (int i = 0; i < fileInfos.Length; i++) + { + //有后缀的名字 + string fileNameWithSuffix = fileInfos[i].Name; + int index = fileNameWithSuffix.LastIndexOf('.'); + //如果后缀不是json直接下一个 + if (fileNameWithSuffix.Length - index <= 4) + { + continue; + } + if (fileNameWithSuffix.Substring(index + 1, 4) != "json") continue; + //没有后缀的名字 + string fileName = fileNameWithSuffix.Substring(0, index); + childJsonFileNames.Add(fileName); + } + DataDirectory directories = new DataDirectory(this.directoryName, this.absPathName, childDirectoryNames, childJsonFileNames); + return directories; + } } + #endregion } diff --git a/Assets/JsonIOTools/Example/Script.meta b/Assets/StreamingAssets/Script.meta similarity index 100% rename from Assets/JsonIOTools/Example/Script.meta rename to Assets/StreamingAssets/Script.meta diff --git a/Assets/JsonIOTools/Example/Script/JsonIOExample.cs b/Assets/StreamingAssets/Script/JsonIOExample.cs similarity index 100% rename from Assets/JsonIOTools/Example/Script/JsonIOExample.cs rename to Assets/StreamingAssets/Script/JsonIOExample.cs diff --git a/Assets/JsonIOTools/Example/Script/JsonIOExample.cs.meta b/Assets/StreamingAssets/Script/JsonIOExample.cs.meta similarity index 100% rename from Assets/JsonIOTools/Example/Script/JsonIOExample.cs.meta rename to Assets/StreamingAssets/Script/JsonIOExample.cs.meta