在应用程序内部创建并打开示例pdf文件

时间:2014-12-15 06:52:47

标签: android

我想在应用程序内部打开一个pdf文件(内部存储)。我有以下代码。但是一旦adobe pdf被打开,它会显示一个弹出错误,因为"文档路径无效"。是否只能从应用程序内部读取pdf文件?如果没有,请告诉我如何将其复制到外部存储。谢谢提前

File file_source = new File(getApplicationContext().getFilesDir()+"/"+"sample.pdf");
                String string = "Hello world!";
                try
                {
                    file_source.createNewFile();
                    FileOutputStream outputStream;
                    outputStream = openFileOutput("sample.pdf", Context.MODE_PRIVATE);
                    outputStream.write(string.getBytes());
                    outputStream.close();
                    if(file_source.exists())
                    {
                        Uri path = Uri.fromFile(file_source);
                        Intent intent1 = new Intent(Intent.ACTION_VIEW);
                        intent1.setDataAndType(path, "application/pdf");
                        intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                        try {
                            startActivity(intent1);
                        } 
                        catch (ActivityNotFoundException e) {
                            Toast.makeText(this, 
                                    "No Application Available to View PDF", 
                                    Toast.LENGTH_SHORT).show();
                            Intent intent2 = new Intent(Intent.ACTION_VIEW);
                            startActivity(intent2);


                        }
                    }
                    else
                    {
                        Log.d("TAG","no file exists");

                    }
                }
                catch (FileNotFoundException e) {
                    Log.d("TAG","File not found");
                }
                catch (IOException ioe) {
                    Log.d("TAG","Exception while reading file" + ioe);
                }

1 个答案:

答案 0 :(得分:0)

应用程序内部存储目录中的文件默认为应用程序的私有文件。这意味着没有PDF-Reader应用程序可以读取该文件(因为它不与您的应用程序pid一起运行 - 没有给出读取权限。)

您必须使用Context.MODE_WORLD_READABLE标志保存具有其他应用的显式读取权限的PDF。

还可以使用Context.openFileOutput()和Context.openFileInput()来读取和写入内部目录中的文件。不要硬编码这样的路径,它们可能会改变。

您可以通过以下代码将文件从内部存储复制到外部存储。

try {
            String file_name="inputpdf.pdf";
            File tempfile = new File(directory, file_name);
            FileInputStream     inStream = new FileInputStream(tempfile);
            //where ctx is your context (this)
            FileOutputStream fos = ctx.openFileOutput("Outputpdf", ctx.MODE_WORLD_WRITEABLE|ctx.MODE_WORLD_READABLE);

             byte[] buffer = new byte[1024];

                int length;
                //copy the file content in bytes 
                while ((length = inStream.read(buffer)) > 0){

                    fos.write(buffer, 0, length);

                }

                inStream.close();
                fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }