当前位置: 首页 > 面试题库 >

Android-从资产\ PDF显示访问文件

薛弘阔
2023-03-14
问题内容

我正在尝试检索对存储在assets目录中的文件的引用,该文件名为myfile.pdf。我尝试这样做如下:

File file = new File("android_assest/myfile.pdf);
Log.d("myTag", "" + file.isFile());

不知何故,false当目录中myfile.pdf存在do
时,我得到了assets。我使用getAssets().list("")Log.d()返回数组中的每个元素验证了它。

其中,我尝试获取对PDF文件的引用,然后使用设备上已安装的任何PDF查看器来查看PDF。

我猜想由于前一个问题(检索对文件的引用)返回false了,因此下一个被剪切的代码失败了:

Intent i = new Intent(Intent.ACTION_VIEW,
    Uri.parse("file:///android_asset/myfile.pdf"));
startActivity(i);

有人知道为什么我无法检索对该文件的引用吗?以及为什么我不能使用已经安装的PDF查看器显示PDF(在检索对PDF文件的引用之后)?

谢谢。


问题答案:

正如巴拉克所说,您可以将其从资产中复制到内部存储或SD卡中,然后使用内置的pdf应用程序从中打开它。

关注Snippet将为您提供帮助。(我已经更新了此代码,以写入内部存储并从中读取文件。

但是我不推荐这种方法,因为pdf文件的大小可以超过100mb。

因此不建议将大文件保存到内部存储中

还要确保在将文件保存到您使用的内部存储时

openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

然后,只有其他应用程序才能读取它。

检查以下代码段。

package org.sample;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

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(), "git.pdf");
        try
        {
            in = assetManager.open("git.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() + "/git.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);
        }
    }

}

确保包括

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

在清单中



 类似资料:
  • 如何在任何浏览器中显示创建的pdf? 当前的输出是这样的,基本上是原始的PDF: %PDF-1.4%2 0 obj<>流x+r 26 s 00 si 2 p 5 1 b 4>>>>/父3 0 r/mediabox[0 0 595 842]>>内dobj 1 0 obj<>内dobj 3 0 obj<>内dobj 5 0 obj<>内dobj 6 0 obj<>内dobj xref 0 7 000

  • 问题内容: 我查看了Stack上的2个示例,但无法使它们正常工作。我只是 想从资产中的文件夹中获取图像并将其设置为ImageView中的值, 但是返回空指针。我究竟做错了什么? 主要活动:包com.xxx.xxx; Extender Class: And my two xml files: Layout> EDIT: Also tried this, but still get a file no

  • 我是android编程新手,有没有一种方法可以使用View在android中加载或显示html文件表单资产文件夹。OnClickListener 让我重新表达我的问题:有没有可能写一个类似下面的代码来调用/加载/显示本地html文件表单资产文件夹时,按钮被点击 如果我不够清楚,一定要告诉我。。 非常感谢!!!!

  • 问题内容: 我从这段代码中从laravel dompdf返回流数据 这是我的JS ajax代码 这是在ajax之后显示pdf的HTML 我低于错误 无法加载PDF文档 请帮助解决此问题。如何显示PDF文件。 问题答案: 默认情况下没有设置。您可以使用polyfill,例如实现二进制数据传输的jquery- ajax-blob-arraybuffer.js ,也可以利用。 。用element代替el

  • 问题内容: 我的/ res / raw /文件夹(/res/raw/textfile.txt)中有一个资源文件,我正在尝试从我的android应用中读取该文件进行处理。 我尝试了不同的路径语法,但始终会遇到 java.io.FileNotFoundException 错误。如何访问/res/raw/textfile.txt进行处理?是 File file = new File(“ res / ra

  • 我正在尝试使用Swift在我的iOS应用程序中显示pdf。我从服务器得到的响应是pdf数据,它看起来如下所示: %PDF-1.4%ôiá1 0 obj 我检查了iOS PDF阅读器和PDFKit,但主要问题是我不明白如何处理应用程序中的响应。 有什么想法吗?谢谢!