ホームページ  >  記事  >  Java  >  Android アプリケーションのアセットフォルダーから PDF ファイルを正しく読み取るにはどうすればよいですか?

Android アプリケーションのアセットフォルダーから PDF ファイルを正しく読み取るにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-31 15:11:02495ブラウズ

How to correctly read a PDF file from the assets folder in an Android application?

アセット フォルダーから PDF ファイルを読み取る

Android アプリケーションのアセット フォルダーから PDF ファイルを読み取るには、いくつかの特定の手順が必要です。

提供されたコードでは、「abc.pdf」ファイルに指定されたファイル パスで問題が発生します。使用されているパス「android.resource://com.project.data Structure/assets/abc.pdf」が正しくありません。

これを解決するには、次の手順に従ってください:

  1. 「abc.pdf」ファイルをアプリケーションの内部ストレージにコピーします。 CopyReadAssets() メソッドを使用して、ファイルをアセット フォルダーから内部ストレージにコピーします。これにより、アプリケーションがファイルにアクセスできるようになります。
  2. 正しいファイル パスを指定します: アセット フォルダー パスを使用する代わりに、アプリケーションの内部ストレージ内のファイル パスを使用します。 Uri.fromFile(file)、file はコピーされた PDF ファイルを表す File オブジェクトです。
  3. 正しい権限を設定します: アプリケーションの AndroidManifest.xml ファイルに WRITE_EXTERNAL_STORAGE 権限が含まれていることを確認してください。アプリケーションが内部ストレージに書き込めるようにします。

必要な変更を加えた更新されたコードは次のとおりです。

<code class="java">public class SampleActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        CopyReadAssets();
    }

    private void CopyReadAssets() {
        AssetManager assetManager = getAssets();

        InputStream in = null;
        OutputStream out = null;
        File file = new File(getFilesDir(), "abc.pdf");
        try {
            in = assetManager.open("abc.pdf");
            out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

            copyFile(in, out);
            in.close();
            in = null;
            out.flush();
            out.close();
            out = null;
        } catch (Exception e) {
            Log.e("tag", e.getMessage());
        }

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

        startActivity(intent);
    }

    private void copyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
    }

}</code>

この更新されたコードは、「abc.pdf」を正しくコピーします。ファイルをアプリケーションの内部ストレージに保存し、正しいファイル パスを使用してサードパーティの PDF ビューアで PDF を開きます。

以上がAndroid アプリケーションのアセットフォルダーから PDF ファイルを正しく読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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