ホームページ >Java >&#&チュートリアル >Android のアセット フォルダーから PDF ファイルを開き、「ファイル パスが無効です」エラーを回避するにはどうすればよいですか?

Android のアセット フォルダーから PDF ファイルを開き、「ファイル パスが無効です」エラーを回避するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 04:31:30527ブラウズ

How to open a PDF file from the assets folder in Android and avoid the

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

はじめに

この記事では、PDF ファイルを開こうとする問題の解決策を提供します。インテントを使用してアセット フォルダーから PDF ファイルを作成すると、「ファイル パスが無効です」というエラー メッセージが表示されます。

問題の説明

元のコードがアクセスしようとしています次のパスを使用して、アセット フォルダー内の PDF ファイル:

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

ただし、このパスは、アプリのディレクトリ構造内での PDF ファイルの実際の場所を考慮していないため、正しくありません。

解決策

この問題を解決するには、次の更新されたコードを使用できます。

<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.parse("file://" + getFilesDir() + "/abc.pdf"),
                "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>

このコードは、まず PDF ファイルをアセット フォルダーからアプリのプライベート ストレージ ディレクトリ。FileOutputStream を使用して他のアプリケーションから確実にアクセスできるようにします。次に、プライベート ストレージ ディレクトリから PDF ファイルを開くインテントを作成します。これにより、無効なファイル パスの問題が解決されます。

アクセス許可

ファイルをプライベート ストレージ ディレクトリを使用するには、AndroidManifest.xml ファイルに次の権限を含める必要があります:

<code class="xml"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></code>

以上がAndroid のアセット フォルダーから PDF ファイルを開き、「ファイル パスが無効です」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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