我想使用外部库显示存储在assets文件夹中的PDF。该库需要一个文件路径。
我读到存储在assets文件夹中的pdf没有存储为文件。我需要的是
到目前为止我得到的是:
stream = getAssets().open("excerpt.pdf");
BufferedReader reader = new BufferedReader(
new InputStreamReader(stream));
不幸的是,我不确定下一步该做什么......
修改 我尝试了以下代码:
private void copyAssets() {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("");
} catch (IOException e) {
Log.e("tag", "Failed to get asset file list.", e);
}
for(String filename : files) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(filename);
String dirout= Environment.getExternalStorageDirectory().getAbsolutePath() + "/X/Y/Z/" ;
File outFile = new File(dirout, filename);
out = new FileOutputStream(outFile);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch(IOException e) {
Log.e("tag", "Failed to copy asset file: " + filename, e);
}
}
}
...
我在“out = new FileOutputStream(outFile);”中遇到异常。 (没有相应的文件和目录)。我以为代码在那里创建了一个文件?
答案 0 :(得分:0)
将文件复制到其他应用程序可以使用与this问题中描述的过程类似的过程访问的公共位置。
保留对您为启动Intent(Intent.ACTION_VIEW)而创建的外部文件的引用。
构建意图以查看您的pdf,例如:
public void viewPdf(File YOUR_PUBLIC_FILE_FROM_STEP_1) {
PackageManager packageManager = getPackageManager();
Intent viewPdf = new Intent(Intent.ACTION_VIEW);
viewPdf.setType("application/pdf");
List<ResolveInfo> list =packageManager.queryIntentActivities(viewPdf,PackageManager.MATCH_DEFAULT_ONLY);
// Check available PDF viewers on device
if (list.size() > 0) {
Intent from_external_app = new Intent(Intent.ACTION_VIEW);
from_external_app.setDataAndType(Uri.fromFile(YOUR_PUBLIC_FILE_FROM_STEP_1),
"application/pdf");
from_external_app.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(from_external_app);
}
答案 1 :(得分:0)
目录是否存在?
如果没有,它将发送IOException。
只是为了确保,尝试这种方法:
final File directory = new File("/sdcard/X/Y/Z/");
if (!directory.exists()) {
directory.mkdirs();
}
如果父目录不存在,它将创建父目录。如果它们存在,它将返回false并且不会删除其中的内容。在此之后,只需按照您的方式继续。
File outFile = new File(directory, filename);
不要忘记将权限添加到AndroidManifest!
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />