gpt4 book ai didi

java - Android - 从 assets\PDF 显示访问文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:47 27 4
gpt4 key购买 nike

我正在尝试将对存储在 assets 目录中的文件的引用检索到名为 myfile.pdf 的文件中。我尝试按如下方式进行:

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

不知何故,当 myfile.pdf 确实存在于 assets 目录中时,我得到了 false。我使用 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 文件的引用之后)?

谢谢。

最佳答案

正如 Barak 所说,您可以将其从 Assets 复制到内部存储或 SD 卡,然后使用内置的 pdf 应用程序从那里打开它。

以下代码段将为您提供帮助。(我已更新此代码以从内部存储写入和读取文件。

但我不推荐这种方法,因为 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" />

在 list 中

关于java - Android - 从 assets\PDF 显示访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10980852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com