-1

ファイルが実際のマシン(またはエミュレーター)にどのように保存されるかについて、私は少し混乱していると思います。

プログラミング中に、手動でアセットフォルダーにxmlファイルを保存できますが、ネットワークに接続してファイルをダウンロードし、どこかに保存してから操作する必要があるアプリを作成するにはどうすればよいですか? 上記のファイルをどこに保存しますか?

新しいファイルを作成したいのですが、別の投稿で、アセットフォルダー自体はパッケージ化すると利用できないことを読みました。では、それらはどこに作成され、保存されるのでしょうか? どのように転送できますか。ただ、私はこのプラットフォームに不慣れで、ファイルシステムは少し混乱しています。

4

3 に答える 3

0

私でさえこの問題に直面しました。これで、アプリケーション プロパティを持つ xml ファイルができました。これは、assets フォルダーにパッケージ化されています。一度パッケージ化すると、assets フォルダー内のファイルを編集できません。アプリの読み込み時に、このファイルを次のパスにコピーするだけです

context.getFilesDir().getAbsolutePath();

そして、アプリケーションは同じ場所から編集します。ファイルが変更されているかどうかは、 DDMSビューのFileExplorerパネルで確認できます。ファイルは、アプリケーションのパッケージ名と同じ名前のフォルダーに保存されます (例: com.abhi.maps)。

または、SD カードにコピーすることもできます。ただし、SD カードが常に利用できる可能性があるため、危険です。

次のコードを使用して、アセット フォルダーからファイルをコピーできます。

    private static void copyFile(String filename, Context context) {
    AssetManager assetManager = context.getAssets();

    InputStream in = null;
    OutputStream out = null;
    try {
        in = assetManager.open(filename);
        String newFileName = context.getFilesDir() + "/" + filename;
        out = new FileOutputStream(newFileName);

        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
    } catch (Exception e) {
        Log.e("tag", e.getMessage());
    }

}

それが役に立てば幸い!:)

于 2012-07-04T06:11:20.610 に答える
0

更新された XML を使用する場合は、アセットからデバイス ストレージにファイルをコピーすることを検討する必要があります。How to copy files from 'assets' folder to sdcard? をご覧ください。これを行う方法を知るために。

もう 1 つの方法は、XML から解析されたデータを格納できるデータベースを使用することです。そのため、コンテンツにアクセスする必要があるたびにファイルを解析する必要はありません。

于 2012-07-04T05:56:38.760 に答える
0

2 つのオプションがあります。アクティビティから getFilesDir() を呼び出して、アプリからのみ読み取り/書き込みが可能な内部データ フォルダーへのパスを取得します。

または、xml ファイルを外部ストレージ (SD カード) に読み書きすることもできます。メソッド Environment.getExternalStorageDirectory() を使用して外部ストレージのルート パスを取得し、必要に応じて独自のフォルダーを作成します。

外部ストレージに書き込む場合、電話のすべてのアプリがアクセスできることに注意してください。

于 2012-07-04T05:59:00.407 に答える