ホームページ  >  記事  >  Java  >  Android アプリがアセット フォルダーから PDF を読み取ろうとすると「ファイル パスが無効です」エラーをスローするのはなぜですか?

Android アプリがアセット フォルダーから PDF を読み取ろうとすると「ファイル パスが無効です」エラーをスローするのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-28 09:48:29750ブラウズ

Why is my Android app throwing a

Assets フォルダーから PDF ファイルを読み取る

問題:

Android アプリケーションでは、提供されたコードを使用してアセット フォルダーから PDF ファイルを読み取ろうとすると、「ファイル パスが無効です。」というエラー メッセージが表示されます。

コード:

関連コードセクションは次のとおりです:

<code class="java">File file = new File("android.resource://com.project.datastructure/assets/abc.pdf");

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/pdf");
startActivity(intent);</code>

解決策:

問題は、File オブジェクトに指定されたパスにあります。正しいパスでは、getAssets() を使用してアセット フォルダーから PDF ファイルを取得する必要があります。

<code class="java">AssetManager assetManager = getAssets();
InputStream in = assetManager.open("abc.pdf");
OutputStream out = openFileOutput("abc.pdf", Context.MODE_WORLD_READABLE);

// Copy PDF file to internal storage
copyFile(in, out);

// Create Intent and URI for file in internal storage
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + getFilesDir() + "/abc.pdf"), "application/pdf");

startActivity(intent);</code>

追加メモ:

  • を追加することを忘れないでください。マニフェスト ファイルへの WRITE_EXTERNAL_STORAGE 権限。
  • copyFile() メソッドは、PDF ファイルをアセット フォルダーから内部ストレージにコピーし、インテントからアクセスできるようにするために使用されます。
  • URI は次のとおりです。 Uri.parse() を使用して構築され、内部ストレージ内のファイルの場所を指します。

以上がAndroid アプリがアセット フォルダーから PDF を読み取ろうとすると「ファイル パスが無効です」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。