web-dev-qa-db-ja.com

asset / rawディレクトリからファイルにアクセスする方法

以下のコードでは、asset/rawフォルダに保存されているファイルにアクセスしようとしていますが、nullを取得しています

E/ERR: file:/Android_asset/raw/default_book.txt (No such file or directory)

エラー、私のコードは:

private void implementingDefaultBook() {
    String filePath = Uri.parse("file:///Android_asset/raw/default_book.txt").toString();
    File   file     = new File(filePath);
    try {
        FileInputStream stream      = new FileInputStream(file);
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("ERR ", e.getMessage());
    } catch (OutOfMemoryError e) {
        e.printStackTrace();
    }
}

enter image description here

13
DolDurma

テキストファイルをAndroidプロジェクトの下の/ assetsディレクトリに配置し、次のようにAssetManagerクラスを使用してアクセスします。

AssetManager am = context.getAssets();
InputStream is = am.open("default_book.txt");

または、/ res/rawディレクトリにファイルを置くこともできます。このディレクトリから、次のようにidでファイルにアクセスできます

InputStream is = 
context.getResources().openRawResource(R.raw.default_book);
18
Malik Ahsan

資産とリソースは、開発マシン上のファイルです。デバイス上のファイルではありません。

アセットの場合、AssetManageropen()を使用して、アセットでInputStreamを取得します。

また、FWIW:

  • Uri.parse("file:///Android_asset/raw/default_book.txt").toString()は、あなたが始めたのと同じ文字列を与えるので無意味です

  • file:///Android_asset/WebViewでのみ機能します

7
CommonsWare

実際の質問には十分に答えられなかったので、ここに行きます

_InputStream is = context.getAssets().openFd("raw/"+"filename.txt")
_

コンテキストはthisまたはgetActivity()または基本的に他のコンテキストにすることができます

重要なのは、_/_で区切られたファイル名の前にフォルダーを含めることです

3
ueen
InputStream is = getAssets().open("default_book.txt");
0
Hussain Shabbir