【问题标题】:Open a .txt file on Android在 Android 上打开一个 .txt 文件
【发布时间】:2014-07-08 17:05:54
【问题描述】:

我目前在 Unity3D 中工作,并希望在单击按钮时简单地打开一个 .txt 文件。

编辑:当我说打开一个 .txt 文件时,我的意思是在设备上的某个编辑器中打开它,而不是打开它并将它的内容保存到我的应用程序中的某个字符串中。有点像打开浏览器从应用程序访问网站。

这是我目前拥有的代码(C#):

private void ShowTextFile(string fileName)
{
    Application.OpenURL(Application.streamingAssetsPath + "/PATH/" + fileName);
}

但它不起作用!我错过了什么?

编辑:我希望 .txt 文件在另一个窗口中打开(例如打开网络浏览器),但它根本没有做任何事情。甚至没有出错。

EDIT2:我尝试改用 Application.persistentDataPath,在这两种情况下,它都说我的 .txt 文件不存在。但是,当使用 Application.persistentDataPath 时,它会打开一个消息框,询问我想用什么打开文件。无论我选择什么,它都会给我一个错误,告诉我错误加载文件或类似的东西。我还注意到它打开了“file:///”。路径前有 file:/// 正常吗?

EDIT3(我着火了!):我认为问题可能与存在“。”这一事实有关。在我的路径中(数据路径中的 com.me.myapp)。有什么办法可以避免这种情况吗?我什至在寻找正确的道路吗?

【问题讨论】:

  • 您能否详细说明您的代码“不起作用”的原因?你期待什么,实际发生了什么?如果您遇到异常,请发布发生异常的行和异常详细信息。

标签: c# android file unity3d


【解决方案1】:

我之前尝试过在 Android 上打开一个 txt 文件,使用这个:

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

其中file为txt文件名(不用写file.txt)。
变量字符串将包含文本文件的内容,您只需在之后循环它们即可。

此方法要求:

using System.Text;
using System.IO;

file.txt 放入名为“Resources”的目录(在 Assets 目录中),如果不存在则创建一个新目录。

【讨论】:

  • 我希望在某个编辑器中打开文件,而不是将其文本保存在字符串变量中然后读取它!
【解决方案2】:

这是我的 Android 代码:

    var rpath = Path.Combine(Application.streamingAssetsPath, "file_name");

    WWW www = new WWW(rpath);
    yield return www;
    StringReader streamReader = new StringReader(www.text);
    text = streamReader.ReadToEnd();

对于 iOS:

    var rpath = Path.Combine(Application.streamingAssetsPath, "file_name");
    StreamReader streamReader = new StreamReader(rpath);
    text = streamReader.ReadToEnd();

注意:StreamingAssets 文件夹中的文件名

【讨论】:

  • 我希望在某个编辑器中打开文件,而不是将其文本保存在字符串变量中然后阅读它! (见有问题的顶部编辑)
【解决方案3】:

找到一个可行的解决方案!事情是这样的,Android 上的流媒体资源路径返回一个只能由 WWW 对象读取的路径。所以我只是用 WWW 对象读取它,然后在我的持久数据路径中重新创建文件。添加了一项检查以确保文件在创建之前不存在。另外,请确保创建目录以防它不存在,否则会出现错误。请注意,如果您有经常访问的大文件,则此解决方案可能不是最佳选择。

    string realPath = Application.persistentDataPath + "/PATH/" + fileName;

    if (!System.IO.File.Exists(realPath))
    {
        if (!System.IO.Directory.Exists(Application.persistentDataPath + "/PATH/"))
        {
            System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/PATH/");
        }

        WWW reader = new WWW(Application.streamingAssetsPath + "/PATH/" + realPath);
        while ( ! reader.isDone) {}

        System.IO.File.WriteAllBytes(realPath, reader.bytes);
    }

    Application.OpenURL(realPath);

如果有人对此答案有什么要补充的,请随意!

【讨论】:

  • 将在 4 小时内接受我的回答(由于某种原因我现在不能接受)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2021-01-04
  • 1970-01-01
相关资源
最近更新 更多