unity Android 的文件操作

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);
        }
    }​

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值