2012-05-07 3 views
0

私は生のフォルダからpdfをsdcardに渡して、デフォルトのインテントでオープンしようとしています。アセットから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

ルノー

+0

ファイルをコピーしていません。 http://stackoverflow.com/a/4530294/1321873 – Rajesh

+0

thxを見て、このリンクを見て、私のコードを変更しましたが、何かが恋しいです。 –

+0

今問題は何ですか?問題を特定してみてください - コピーしたファイルを読むことができるかどうかを確認してください(たとえば、コンピュータにダウンロードするなど)。 – Rajesh

答えて

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(...)を呼び出すと実際にファイルを取得していることを確認してください

+0

よろしくお願いいたします。遅れて申し訳ありませんが、私はあなたのコードを修正しています。私は今、sdcardファイルを十分に埋めると思っています。私はこの1つよりもpdfを読む方法が他にはありません –

+0

1) 'out.close()'の前に 'out.flush();'を呼び出そう2)元のファイルとコピーされたPDFのファイルサイズは? – Gophermofur

+0

'FileOutputStream out = new FileOutputStream(pdfFile);を' OutputStream out = new FileOutputStream(pdfFile)に変更しようとすると、 – Gophermofur

関連する問題