ホームページ >Java >&#&チュートリアル >Android のアセット フォルダーから 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 サイトの他の関連記事を参照してください。