Unity 读取文本文档 方法总结

时间:2024-11-11 08:19:00

如题,我写一个测试的文本文档吧

来看一下总结出来的思路

除了textasset常用resources加载textasset类型之外

 其他方式皆可读取unity内特定文件和项目外文件,有些还可以向文件写入内容

 

非文件流

1.TextAsset (可以依赖Resources路径,只读)

Unity - 脚本 API:TextAsset

这是Unity提供的读取原始文本和二进制的一个类,使用起来也非常的方便

如果你不知道什么是Resources,请参考这篇文章

Unity数据持久化 万物之源Resources动态资源加载_unity 动态加载资源-****博客

 简单的演示代码

    // Start is called before the first frame update
    void Start()
    {
        TextAsset str = Resources.Load<TextAsset>("Test");
        if(str!=null){
            Debug.Log(str.text);
        }else{
            Debug.LogError("未加载到文件");
        }
    }

 2.File(System.IO 读取项目外文件,可读可写)

        注意这种方法,读取文件路径要双斜杠,原因是 转义字符+再转义 = 原字符 这个规则

 string testPath = "C:\\Users\\Nharker\\Desktop\\Test.txt";
 if (File.Exists(testPath)){
     Debug.Log(testPath);
    string str = File.ReadAllText(testPath);
    Debug.Log(str);
 }

        

3. Application.persistentDataPath(可读可写)

        这个就不做演示了,就是把File的路径改为这个就行了,但是我要说一句这个路径根据不同平台有所出入,所以不是绝对的,具体请查看官方文档Application-persistentDataPath - Unity 脚本 API

文件流

1.字符流读取外部文件(System.IO 可读可写)

FileStream 通常用于二进制文件读取,当然也可以读字符串

  string testPath = "C:\\Users\\Nharker\\Desktop\\Test.txt";
  using (FileStream fs = new FileStream(testPath, FileMode.Open)) {
      byte[] chars =new byte[fs.Length];
      fs.Read(chars, 0, chars.Length);//参数: 读取到哪个数组 , 从第几位开始 ,读取多长的字节
      string str =System.Text.Encoding.UTF8.GetString(chars);
      Debug.Log(str);
  } 

StreamReader

   using (StreamReader reader = new StreamReader(testPath)) {
       string line;
       while ((line = reader.ReadLine()) != null) {
           Debug.Log(line);
       }
   }


        StreamWriter

   using (StreamWriter writer = new StreamWriter(writePath))
        {
            writer.Write(content);
        }

这个就是C#提供的写入文件的api,我认为不如FileStream 只需要修改filemode 然后调用fs.wrte的api即可

二者区别

2. 文件流读取 但是依赖StreamingAssets(只读)

           众所周知,StreamingAssets是unity的一个只读的路径,可以在其中存放文件流

   

            有疑问请自行查看官方文档,Application-streamingAssetsPath - Unity 脚本 API

   using (FileStream fs = File.Open(Application.streamingAssetsPath + "/Test.txt", FileMode.Open)) {
       byte[] chars = new byte[fs.Length];
       fs.Read(chars, 0, chars.Length);
       string str = System.Text.Encoding.UTF8.GetString(chars);
       Debug.Log(str);
   }

 using (StreamReader reader = new StreamReader(Application.streamingAssetsPath + "/Test.txt")) {
     string result = reader.ReadToEnd();
     Debug.Log(result);
 }