Unity windows环境下 存在Assets/StreamingAssets目录下的文件可以直接使用路径:
path= Application.streamingAssetsPath + "/" + fileName;
进行读写操作。但是在Android的环境中Assets/StreamingAssets目录下的文件只能进行读取的操作。
Android的环境中使用路径:
path = Application.persistentDataPath + "/" + fileName;
Application.persistentDataPath (可持久化的目录)路径中的文件可以使用windows环境的文件读写操作(文件流FileStream读写和File类的读写)
创建
public void CreateFileInPersistentData(string fileName)
{
string path = Application.persistentDataPath + "/" + fileName;
if (File.Exists(path))
{
return;//存在该文件
}
else
{
//文件不存在
FileStream fs = new FileStream(path, FileMode.Create);
fs.Close();
}
}
写入
public void WriteTXT(string fileName, string s)//写入String
{
string url = null;
if (Application.platform == RuntimePlatform.Android)
{
url = Application.persistentDataPath + "/" + fileName;
File.WriteAllText(url, s);
}
else if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
{
url = Application.persistentDataPath + "/" + fileName;
FileStream fs = new FileStream(url, FileMode.Create);
byte[] bytes = new UTF8Encoding().GetBytes(s.ToString());
fs.Write(bytes, 0, bytes.Length);
fs.Close();
}
}
写入数组
public static void WriteTXT(string fileName, List<string> lines)//写入数组
{
string url = null;
url = Application.persistentDataPath + "/" + fileName;
File.WriteAllLines(url, lines.ToArray());
}
读入
public string LoadTXTtoString(string fileName)
{
string url = Application.persistentDataPath + "/" + fileName;
string s = null;
if (Application.platform == RuntimePlatform.Android)
{
s = File.ReadAllText(url);
}
else if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
{
FileStream fs = new FileStream(url, FileMode.Open);
byte[] bytes = new byte[100];
fs.Read(bytes, 0, bytes.Length);
//将读取到的二进制转换成字符串
s = new UTF8Encoding().GetString(bytes);
fs.Close();
}
return s;
}
读入数组
public List<string> LoadTXTtolist(string fileName)
{
string url = Application.persistentDataPath + "/" + fileName;
List<string> lines = new List<string>(File.ReadAllLines(url));
return lines;
}
追加
public void AppendTXT(string fileName, string s)//写入String
{
string url = Application.persistentDataPath + "/" + fileName;
FileStream fs = new FileStream(url, FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(s);
sw.Close();
fs.Close();
}
如需在Android环境下读写Assets/StreamingAssets的文件,一个解决办法是将Assets/StreamingAssets目录下的文件复制到Application.persistentDataPath 目录下,之后对复制后 的文件进行操作。
public void CopyFileFromStreamingAsset(string fileName)
{
string from_path= Application.streamingAssetsPath + "/" + fileName;
string to_path = Application.persistentDataPath + "/" + fileName;
WWW www = new WWW(from_path);
while (!www.isDone) { }
if (www.error == null)
{
File.WriteAllBytes(to_path, www.bytes);
}
}