Unity各类基础数据库的基本操作(一)--TXT
对数据库的操作无非是增删改查。
在采取对TXT数据库文件操作时,注意先引用命名空间:
I/O操作的明明空间:
using System.IO
Unity编辑器的命名空间:
using UnityEditor;
1.首先是创建写入数据
/// <summary>
/// 创建并写入数据
/// </summary>
/// <param name="path">Path.文件路径</param>
/// <param name="name">Name.文件名称</param>
/// <param name="info">Info.要写入的信息</param>
void CreateFile(string path,string name,string info)
{
StreamWriter sw;//写入流
//定义一个文本
FileInfo fi = new FileInfo(path + "//" + name);
//如果文本不存在,创建路径
if (!fi.Exists) {
sw = fi.CreateText();
} else {
//如果存在,打开
sw = fi.AppendText();
}//现在这个fi一定存在
//以行的形式写入信息
sw.WriteLine(info);
//关闭流
sw.Close();
//销毁流
sw.Dispose();
}
2.读取数据
/// <summary>
/// 读取数据
/// </summary>
/// <returns>The file.文件信息</returns>
/// <param name="">.文件名称</param>
ArrayList LoadFile(string path ,string name){
StreamReader sr;//读取流
try {//尝试,视图
//两个方法是一样的,File是静态类,FileInfo:是普通类
sr = File.OpenText(path + "//" + name);
// FileInfo fi = new FileInfo(path + "//"+ name);
// sr = fi.OpenText();
} catch (System.Exception ex) {//捕获,Exception:异常(运行时出现的错误)
return null;//抛出捕获的异常
}
string strLine;//行的信息
ArrayList arrayList = new ArrayList();
//不为空,则一直循环,也就是sr.ReadLine阅读到了内容
while((strLine = sr.ReadLine())!= null){
//吧阅读到的内容添加到ArrayList中
arrayList.Add (strLine);
}
//关闭流
sr.Close();
//销毁流
sr.Dispose();
return arrayList;
}
File和FileInfo的区别:
File是静态类,他对应整个系统进行操作,方法均为静态方法,如果只是对文件进行少量的操作,
如判断文件是否存在之类的,或者对很多的文件精心操作,
建议使用File类,因为可以避免频繁创建和释放对象的系统开销
FlieInfo是一个实例类(普通类),它对应一个具体的文件进行操作,方法大部分是普通方法,
它里面的操作可能是调用的File类里面的静态方法,如果是对一个文件进行大量操作,建议使用FileInfo
在安全检查方面,通过File类去掉用某个方法,都要占用CPU一定的处理时间来进行安全检查
即使是使用File类不同的方法重复对一个文件访问时,也是如此,而FileInfo类只在创建FileinFo对象的时候执行一次安全检查
3.删除数据
void DeleteFile(string path ,string name){
//两个方法,静态,普通
File.Delete (path + "//" + name);
// FileInfo fi = new FileInfo (path + "//" + name);
// fi.Delete ();
}
4.调用这些方法
if (Input.GetKeyDown(KeyCode.C)) {
//实例化写入的方法,传入“Application.dataPath”路径和文件名,“要写入的内容”,三个参数
CreateFile (Application.dataPath,"Test01.txt","TXT数据库测试01");
CreateFile (Application.dataPath, "Test01.txt", "TXT数据库测试02");
//刷新project视图
AssetDatabase.Refresh();
}
if (Input.GetKeyDown(KeyCode.R)) {
//实例化读取数据的方法,传路径,读取的文件名,因为方法里返回一个ArrayList,所以需要接受一下
_ArrayList = LoadFile (Application.dataPath, Test01.txt");
//遍历,打印出来
foreach (string item in _ArrayList) {
print (item);
}
}
if (Input.GetKeyDown(KeyCode.D)) {
DeleteFile (Application.dataPath,"Test01.txt");
//预编译命令
#if UNITY_EDITOR_OSX //运行平台名称,这用的是Mac
//刷新project视图,AssetDatabase:数据库,Refresh:刷新
AssetDatabase.Refresh();
#elif UNITY_ANDROID
print(111);
#endif
}
源代码:
using UnityEngine;
using System.Collections;
using System.IO;//I/O操作的命名空间
using UnityEditor;//Unity编辑器的命名空间
public class Data_TxT : MonoBehaviour
{
//定义一个数组
private ArrayList _ArrayList;
void Start ()
{
//打印路径名
print (Application.dataPath);
}//end_Start
void Update ()
{
if (Input.GetKeyDown(KeyCode.C)) {
//实例化写入的方法,传入“Application.dataPath”路径和文件名,“要写入的内容”,三个参数
CreateFile (Application.dataPath,"Test01.txt","TXT数据库测试01");
CreateFile (Application.dataPath, "Test01.txt", "TXT数据库测试02");
//刷新project视图
AssetDatabase.Refresh();
}
if (Input.GetKeyDown(KeyCode.R)) {
//实例化读取数据的方法,传路径,读取的文件名,因为方法里返回一个ArrayList,所以需要接受一下
_ArrayList = LoadFile (Application.dataPath, "Test01.txt");
//遍历,打印出来
foreach (string item in _ArrayList) {
print (item);
}
}
if (Input.GetKeyDown(KeyCode.D)) {
DeleteFile (Application.dataPath,"Test01.txt");
//预编译命令
#if UNITY_EDITOR_OSX
//刷新project视图,AssetDatabase:数据库,Refresh:刷新
AssetDatabase.Refresh();
#elif UNITY_ANDROID
print(111);
#endif
}
}//end_Update
/// <summary>
/// 创建并写入数据
/// </summary>
/// <param name="path">Path.文件路径</param>
/// <param name="name">Name.文件名称</param>
/// <param name="info">Info.要写入的信息</param>
void CreateFile(string path,string name,string info)
{
StreamWriter sw;//写入流
//定义一个文本
FileInfo fi = new FileInfo(path + "//" + name);
//如果文本不存在,创建路径
if (!fi.Exists) {
sw = fi.CreateText();
} else {
//如果存在,打开
sw = fi.AppendText();
}//现在这个fi一定存在
//以行的形式写入信息
sw.WriteLine(info);
//关闭流
sw.Close();
//销毁流
sw.Dispose();
}
/// <summary>
/// 读取数据
/// </summary>
/// <returns>The file.文件信息</returns>
/// <param name="">.文件名称</param>
ArrayList LoadFile(string path ,string name){
StreamReader sr;//读取流
try {//尝试,视图
//两个方法是一样的,File是静态类,FileInfo:是普通类
sr = File.OpenText(path + "//" + name);
// FileInfo fi = new FileInfo(path + "//"+ name);
// sr = fi.OpenText();
} catch (System.Exception ex) {//捕获,Exception:异常(运行时出现的错误)
return null;//抛出捕获的异常
}
string strLine;//行的信息
ArrayList arrayList = new ArrayList();
//不为空,则一直循环,也就是sr.ReadLine阅读到了内容
while((strLine = sr.ReadLine())!= null){
//吧阅读到的内容添加到ArrayList中
arrayList.Add (strLine);
}
//关闭流
sr.Close();
//销毁流
sr.Dispose();
return arrayList;
}
void DeleteFile(string path ,string name){
//两个方法,静态,普通
File.Delete (path + "//" + name);
// FileInfo fi = new FileInfo (path + "//" + name);
// fi.Delete ();
}
}