1

私の Android アプリでは、SDCARD にコピーする必要があるファイルを /assets フォルダーにパッケージ化しました。アセット フォルダーの内容を一覧表示すると、String[]「画像」、「サウンド」、「webkit」、および「kioskmode」が表示されますが、手動でアセット フォルダーに追加されたファイルは表示されません。

私のコードはここにあります:

private void copyAsset () {
    AssetManager am = getApplicationContext().getAssets();
    String[] files = null;
    try {
      files = am.list("");
    } catch (IOException e) {

    }

    for (String filename : files) {
        if (filename.equals("images") || filename.equals("kioskmode") ||
                filename.equals("sounds") || filename.equals("webkit")) {
            Log.i(TAG, "Skipping folder " + filename);
            continue;
        }
        InputStream in = null;
        OutputStream out = null;
        try {
            in = am.open(filename);
            File outFile = new File(Environment.getExternalStorageDirectory().getPath(), filename);
            out = new FileOutputStream(outFile);
            copyFile(in, out);
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(TAG, "Error copying asset ", e);
        }
    }
}

これがアプリの 2 番目のクラスであり、 MainActivity を使用して呼び出されることに違いはありIntent showHelper = new Intent(this, HelperManager.class); startActivity(showHelper);ますか?

ビットの有無にかかわらず2 行目 ( AssetManager am = ...) をgetApplicationContext()試し、ファイルを /assets のサブフォルダーに移動しようとfiles = am.list("")し、先頭と末尾のスラッシュを試しました。サブフォルダーを使用すると、コードの実行時にファイル配列が空になります(files = am.list("");行にブレークポイントを設定し、実行時に検査しました。奇妙なことに、最初にコードを書いたときに一度だけ機能しましたが、さらにテストするために、電話の /sdcard フォルダーからファイルを削除しました, そして、ファイルがまだ資産フォルダーにあるにもかかわらず、それは機能しませんでした. それが問題であれば、私は Android Studio を使用しています. ありがとう

4

1 に答える 1

0

Load a simple text file in Android Studioを修正として使用して解決策を得ることができました。まだ4つのフォルダーがファイル配列に配置されていますが、上記のコードを使用してそれらをスキップできますが、不要な4つのファイルではなく、必要なファイルをチェックする必要があります!

于 2013-07-16T17:47:29.800 に答える