0

我很难弄清楚如何在 Android 设备上写入和读取文件。该文件将被格式化为 XML,我已经构建了解析器和数据结构,可以将 XML 格式化为对象并将对象格式化为 XML,但最后一个障碍是从非资源文件中读取 XML(我知道数据结构可以工作,因为我在从资源文件读取时工作)并写入非资源文件。我不擅长使用工具进行调试(不知道如何打印堆栈跟踪),但我知道事实上问题是我无法读取或写入这些文件。我没有用 Java 写文件的经验,这可能就是我在这方面遇到困难的原因。

编写代码:

    File scoresFile = new File(getExternalFilesDir(null), "scores.xml");

    if (!scoresFile.exists())
    {
        scoresFile.createNewFile();
    }

    OutputStream os = new FileOutputStream(scoresFile);

    os.write(writer.toString().getBytes());
    os.flush();
    os.close();

阅读代码:

    XmlPullParserFactory xmlFac = XmlPullParserFactory.newInstance();
    XmlPullParser qXML = xmlFac.newPullParser();
    InputStream is = null;
    File scoresFile = new File(c.getExternalFilesDir(null), "scores.xml");

    if (!scoresFile.exists())
    {
        try {
            scoresFile.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    try {
        is = new FileInputStream(scoresFile);
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    if (is != null)
        qXML.setInput(is,null);
    else
        qXML = c.getResources().getXml(R.xml.scores);

更新:读取部分中的最后一个 if 子句始终评估为 false。所以, InputStream 是空的......这似乎是我问题的根源。

4

1 回答 1

2

我会看看这两个链接: 使用内部存储使用外部存储

两者都链接到同一个页面,只是不同的部分。实际上,这取决于您是否要将此文件保存到设备内存或外部介质(例如 SD 卡)。

  1. 内部 - 沙盒,因此只有您的应用可以访问它。
  2. 外部 - 任何人都可以访问它。
于 2011-07-27T16:27:18.110 回答