Android从asstes文件夹中读取PDF文件

问题描述 投票:0回答:1

我有需要放入asstes文件夹中的PDF文件列表,我的要求是从asstes中读取文件并将其显示在列表视图中。 如果我们点击每个列表项需要阅读相应的 PDF 文件

我关注了这个博客http://androidcodeexamples.blogspot.in/2013/03/how-to-read-pdf-files-in-android.html

但是这里他们给出了从外部存储目录读取 PDF 文件

我想实现同样的从Asstes文件夹读取文件

任何人都可以帮助如何实现从资产读取文件的相同示例吗?

android android-layout pdf android-intent android-listview
1个回答
2
投票

您无法直接从assets文件夹中打开pdf文件。您首先必须将文件从assets文件夹写入sd卡,然后从sd卡读取。

尝试使用以下代码从资产文件夹中复制并读取文件:

 //method to write the PDFs file to sd card 
 private void PDFFileCopyandReadAssets()
    {
        AssetManager assetManager = getAssets();

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

            readFile(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() + "/test.pdf"),
                "application/pdf");

        startActivity(intent);
    }

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

从SD卡打开文件如下:

File file = new File("/sdcard/test.pdf");        
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),"application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

还提供在清单中写入外部存储的权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
© www.soinside.com 2019 - 2024. All rights reserved.