在Android上打开.txt文件

时间:2014-07-08 17:05:55

标签: c# android file unity3d

我目前在Unity3D工作,希望在点击按钮后打开一个.txt文件。

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

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

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

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

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

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

EDIT3(我好起火!):我认为这个问题可能与“。”有关。在我的路径中(数据路径中的com.me.myapp)。有什么方法可以避免这种情况吗?我是否正在寻找正确的道路?

3 个答案:

答案 0 :(得分:0)

我之前尝试在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"的目录中。 (在资产目录内),如果不在那里则创建一个新的。

答案 1 :(得分:0)

这是我的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文件夹中的file_name

答案 2 :(得分:0)

找到有效的解决方案!在这里,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);

如果有人有任何要添加到这个答案,请随意!