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);

更新: read セクションの最後の if 句は、常に false と評価されます。したがって、 InputStream は null です...これが私の問題の原因のようです。

4

1 に答える 1

2

これらの 2 つのリンクを見てみましょう: 内部ストレージ使用と外部ストレージの使用

どちらも同じページにリンクしていますが、部分が異なります。実際には、このファイルをデバイスのメモリに保存するか、外部メディア (SD カードなど) に保存するかによって異なります。

  1. 内部 - サンドボックス化されているため、アプリのみがアクセスできます。
  2. 外部 - 誰でもアクセスできます。
于 2011-07-27T16:27:18.110 に答える