how to read .pdf file in assets folder

2020-07-24 04:25发布

File file = new File("android.resource://com.baltech.PdfReader/assets/raw/"+filename);

                    if (file.exists()) {
                    Uri targetUri = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(targetUri, "application/pdf");
                        try {
                            startActivity(intent);
                        } 
                        catch (ActivityNotFoundException e) {
                            Toast.makeText(PdfReaderActivity.this, "No Application Available to View PDF", Toast.LENGTH_SHORT).show();
                        }

i want to read .pdf file which is in assets folder. what path i hav to give in filename. plz help. Thanks

标签: android pdf
3条回答
太酷不给撩
2楼-- · 2020-07-24 04:39

Since assets files are stored inside apk file, there is no absolute path of the assets folder. You might use a workaround creating a new file used as a buffer.

You should use AssetManager:

AssetManager mngr = getAssets();
InputStream ip = mngr.open(<filename in the assets folder>);
File assetFile = createFileFromInputStream(ip);


private File createFileFromInputStream(InputStream ip);

try{
   File f=new File(<filename>);
   OutputStream out=new FileOutputStream(f);
   byte buf[]=new byte[1024];
   int len;
   while((len=inputStream.read(buf))>0)
     out.write(buf,0,len);
  out.close();
  inputStream.close();

 }catch (IOException e){}
}
}
查看更多
Rolldiameter
3楼-- · 2020-07-24 04:54

I'm not sure if you got an answer to this already, seems pretty old, but this worked for me.

//you need to copy the input stream to a new file, so store it elsewhere
//this stores it to the sdcard in a new folder "MyApp"
String filename = Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyApp/solicitation_form.pdf";

AssetManager assetManager = getAssets();

try {
    InputStream pdfFileStream = assetManager.open("solicitation_form.pdf");
    CreateFileFromInputStream(pdfFileStream, filename);

} catch (IOException e1) {
    e1.printStackTrace();
}

File pdfFile = new File(filename); 

The CreateFileFromInputStream function is as follows

public void CreateFileFromInputStream(InputStream inStream, String path) throws IOException {
    // write the inputStream to a FileOutputStream
    OutputStream out = new FileOutputStream(new File(path));

    int read = 0;
    byte[] bytes = new byte[1024];

    while ((read = inStream.read(bytes)) != -1) {
        out.write(bytes, 0, read);
    }

    inStream.close();
    out.flush();
    out.close();

}

Really hope this helps anyone else who reads this.

查看更多
Animai°情兽
4楼-- · 2020-07-24 04:55
File file = new File("file:///android_asset/raw/"+filename);

replace the above line with below and try..

File file = new File("android.resource://com.com.com/raw/"+filename);

and place your PDF file raw folder instead of asset. Also change com.com.com with your package name.

查看更多
登录 后发表回答