将pdf从资产传递到SD卡

时间:2012-05-07 13:51:12

标签: android

我正在尝试从我的原始文件夹传递sdcard pdf,以默认意图打开它。

当我打开它时,据说我的pdf已经损坏了。因为我不太清楚流是如何工作的,所以我认为这个问题来自那里。

final String extStorageDirectory = Environment
                        .getExternalStorageDirectory().toString();
                final String festivalDirectory_path = extStorageDirectory
                        + Constants.PDF_STORAGE_PATH;
                File pdfOutputFile = new File(festivalDirectory_path, "/");
                if (pdfOutputFile.exists() == false) {
                    pdfOutputFile.mkdirs();
                }
                File pdfFile = new File(pdfOutputFile, nameOfThePdf);

                try {
                    InputStream in = getResources().openRawResource(R.raw.blablublo);

                    FileOutputStream out = new FileOutputStream(pdfFile);
                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;
                    while ((bufferLength = in.read(buffer)) > 0) {
                        out.write(buffer, 0, bufferLength);
                    }
                    out.close();
                } catch (Exception e) {
                    Log.e("tag", e.getMessage());
                }
                Uri path = Uri.fromFile(pdfFile);
//              Uri path = Uri.parse(Constants.SPLASH_URI + R.raw.cartecannotpdf);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(path, "application/pdf");
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

希望有人能帮助我!

THX

雷诺

1 个答案:

答案 0 :(得分:0)

好吧,看起来你的解决方案已经完成了一半。

InputStream inputStream = assetManager.open("cartecanotpdf.pdf"); - 创建一个流,您可以使用该流来读取assets文件夹中PDF文件中的所有数据。

File file = new File(dir, "cartecannotpdf.pdf"); - 这只是创建一个指向SDCARD上文件所在位置的链接。

您丢失的部分实际上是将字节从输入流复制到输出流。目前,SDCARD上的文件要么不存在,要么只是一个空壳(没有任何数据),所以你的意图会抱怨它已经损坏了。

这是一个QA,为您提供完整的解决方案。 How to copy files from 'assets' folder to sdcard?

编辑:此外,我不确定您是否需要将文件放在资源文件夹中,或者是否可以将其保留在RAW文件夹中。我一直在使用我的资源文件夹中的文件。当你调用assetManager.open(...)

时,确保你实际上是在获取文件