2012-05-07 2 views
0

원시 목적의 폴더에서 sdcard를 pdf로 전달하여 기본 의도로 열려고합니다.애셋에서 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); 

누군가 나를 도울 수 있기를 바랍니다. 솔루션 절반 완료처럼

들으

르노

+0

파일을 _copying_하고 있지 않습니다. http://stackoverflow.com/a/4530294/1321873 – Rajesh

+0

thx에서이 링크를보고 결과에서 내 코드를 수정했지만 다른 것을 놓치지 마세요 –

+0

지금은 어떤 문제가 있습니까? 문제를 격리 시키십시오. 복사 한 파일을 읽을 수 있는지 확인하십시오 (예 : 컴퓨터로 다운로드). – Rajesh

답변

0

글쎄, 그것은 보인다.

InputStream inputStream = assetManager.open("cartecanotpdf.pdf"); - 에셋 폴더의 PDF 파일에서 모든 데이터를 읽는 데 사용할 수있는 스트림을 만듭니다.

File file = new File(dir, "cartecannotpdf.pdf"); - 파일을 저장할 SDCARD의 위치에 대한 링크를 만듭니다.

누락 된 부분은 실제로 입력 스트림에서 출력 스트림으로 바이트를 복사하는 것입니다. 현재 SDCARD의 파일은 존재하지 않거나 단지 빈 쉘 (데이터가 없음)이므로 손상된 것으로 사용자의 의도가 불만을 제기합니다.

완전한 솔루션을 갖춘 품질 보증을 제공합니다. How to copy files from 'assets' folder to sdcard?

편집 : 파일을 자산 폴더에 저장해야하는지 또는 RAW 폴더에 둘 수 있는지 여부는 확실하지 않습니다. 저는 항상 자산 폴더에있는 파일에 대해 작업했습니다. assetManager.open (...)을 호출 할 때 실제로 파일을 가져 오는지 확인하십시오.

+0

기다려 주셔서 죄송합니다. 둘 다 말한대로 코드를 수정하려고했지만 아직 작동하지 않습니다. 나는 이제 sdcard 파일을 잘 채우고 있다고 생각합니다. 나는이 하나보다 pdf를 읽는 다른 방법을 보지 못했다 –

+0

1)'out.close()'전에'out.flush();'를 호출 해 보라. 2) 원본 및 복사 된 PDF의 파일 크기는 얼마인가? – Gophermofur

+0

'FileOutputStream out = new FileOutputStream (pdfFile);을'OutputStream out = new FileOutputStream (pdfFile);으로 변경해보십시오. – Gophermofur

관련 문제