Unity安卓读写配置文件
程序员文章站
2022-07-12 13:03:08
...
目录
一、参考:https://blog.csdn.net/ou_nvhai/article/details/78838481
①、第一次运行时候系统就自动检测在系统文件夹下面是否有这个文件,所以以后修改的都是这个目录下的文件了
②这中写法的xml格式我没有研究出怎么读取数据 ,还是使用一个节点里面一个内容的格式,参考其余文档上面都有介绍
③、使用 int.TryParse(student.Attributes["x"].Value,out x);得到属性里面x的值
一、参考:https://blog.csdn.net/ou_nvhai/article/details/78838481
1、思路:StreamingAssets里有一个xml文件,persistentDataPath第一次时候需要读取StreamingAssets里的xml文件,程序都是对persistentDataPath的xml文件进行读写操作
研究了很久,终于找到了安卓读取配置文件的方法,下面是一步步步骤
1、代码:
/// <summary>
/// 安卓读写xml:准备使用persistentDataPath读取到最初的xml文件,然后之后都是修改persistentDataPath文件
/// 结果:
/// 功能:
/// </summary>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Xml;
using UnityEngine.UI;
public class MyTestXml05 : MonoBehaviour
{
private string xmlPath;
public static string id;
public static string score;
public Text text_xml;
void Awake()
{
if (Application.platform == RuntimePlatform.Android)
{
//localPath = Application.streamingAssetsPath + "/score.xml"; //在Android中实例化WWW不能在路径前面加"file://"
//xmlPath = "jar:file://" + Application.dataPath + "!/assets" + "/score.xml";
xmlPath = "jar:file://" + Application.streamingAssetsPath + "/assets" + "/score.xml";
Debug.Log(xmlPath);
}
else
{
xmlPath = "file://" + UnityEngine.Application.streamingAssetsPath + "/score.xml";//在Windows中实例化WWW必须要在路径前面加"file://"
Debug.Log(xmlPath);
}
StartCoroutine(CopyFiles(xmlPath));
}
// Use this for initialization
void Start()
{
// xmlPath = Application.persistentDataPath + "/test.xml";
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// 安卓写xml:
/// 网页:https://blog.csdn.net/a123qaz021/article/details/83715159
/// </summary>
IEnumerator CopyFiles(string path)
{
WWW www = new WWW(path);
yield return www;
if (www.isDone)
{
string newPath = Application.persistentDataPath + "/" + "score.xml";
if (!File.Exists(newPath))
{
File.WriteAllBytes(newPath, www.bytes);//如果persistentDataPath没有找到xml文件,就会在persistentDataPath目录下面新建一个xml文件
}
}
ReadXml();
}
/// <summary>
/// 安卓读xml:
/// 网页:https://blog.csdn.net/a123qaz021/article/details/83715159
/// </summary>
public void ReadXml()
{
string path = Application.persistentDataPath + "/" + "score.xml";
string strs = File.ReadAllText(path);
Debug.Log(path);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNodeList nodeList = xmlDoc.SelectSingleNode("rank").ChildNodes;
foreach (XmlElement xe in nodeList)
{
id = xe.GetAttribute("id");
score = xe.GetAttribute("score");
//allScore.Add(int.Parse(score)); //将所有得分读入List
//Debug.Log("ID:" + id + " Score:" + score);
//MyDebug.Add(id, id);
xe.SetAttribute("id", "123123");
MyDebug.Add("id被修改了",0);
}
path = Application.persistentDataPath + "/" + "score.xml";
strs = File.ReadAllText(path);
text_xml.text = strs;
xmlDoc.Save(path);
}
}
1、解析:
当我找到了persistentDataPath里的xml文件后,通过解析它,就可以设置它里面的属性,xe.SetAttribute("id", "123123");
1、xml文件
<?xml version="1.0" encoding="UTF-8"?>
<rank>
<rank id="123123" score="12" />
<rank id="123123" score="22" />
<rank id="123123" score="22" />
</rank>
1、运行效果
①、电脑:如果是编辑器运行的话,电脑上面会有这个xml产生
①、手机:
1、注意
①、第一次运行时候系统就自动检测在系统文件夹下面是否有这个文件,所以以后修改的都是这个目录下的文件了
②这中写法的xml格式我没有研究出怎么读取数据 ,还是使用一个节点里面一个内容的格式,参考其余文档上面都有介绍
③、使用 int.TryParse(student.Attributes["x"].Value,out x);得到属性里面x的值