在Unity3d(Android)上使用StreamReader无法读取文件中的行

时间:2014-12-09 09:24:41

标签: android unity3d filestream streamreader

我需要在android平台上使用StreamReader从文件中读取文本流。文件大约是100k行,所以如果我尝试将它全部加载到TextAsset或者如果我使用WWW,那么即使编辑器也会卡住。

我只需要逐行读取该文件而不将其全部加载到字符串中。然后我将从文件中获取的行生成树。 (但可能那部分没关系,我只需要文件阅读部分的帮助。)

我正在给出我在下面写下的代码。它在编辑器上完美运行,但在android上失败。

如果有人告诉我,我很遗憾,我很高兴。

(ps。英语不是我的母语,这是我在网站上的第一个问题。很抱歉我可能犯过的任何错误。)

private bool Load(string fileName)
     {
         try
         {
             string line;
             string path = Application.streamingAssetsPath +"/";

             StreamReader theReader = new StreamReader(path + fileName +".txt", Encoding.UTF8);

             using (theReader)
             {


                 {
                     line = theReader.ReadLine();

                     linesRead++;
                     if (line != null)
                     {
                         tree.AddWord(line);

                     }
                 }
                 while (line != null);


                 theReader.Close();
                 return true;
             }
         }

         catch (IOException e)
         {
             Debug.Log("{0}\n" + e.Message);
             exception =   e.Message;
             return false;
         }
     }

1 个答案:

答案 0 :(得分:0)

您不能将Application.streamingAssetsPath用作Android上的路径,因为流媒体资源会与应用程序一起存储在JAR文件中。

来自http://docs.unity3d.com/Manual/StreamingAssets.html

  

请注意,在Android上,文件包含在压缩的.jar中   file(基本上与标准zip压缩格式相同)   文件)。这意味着如果你不使用Unity的WWW类   检索文件然后您将需要使用其他软件来查看   在.jar归档文件中并获取文件。

在协程中使用这样的WWW:

 WWW data = new WWW(Application.streamingAssetsPath + "/" + fileName);
 yield return data;
 if(string.IsNullOrEmpty(data.error))
 {
    content = data.text;
 }

或者,如果您真的想保持简单(并且您的文件只有几十万,请将其粘贴在资源文件夹中:

TextAsset txt = (TextAsset)Resources.Load(fileName, typeof(TextAsset));
string content = txt.text;