title: Download PDF file android
body: <p>i have An Error while download PDF file From Server and save it on SD 
  i have permission To Access internet and external storage ..
  It`s working fine on android 2.3.6
  But on Tab 4.1.1 its create the file with 0 byte </p>
  
  <pre><code>URL url = new URL("https://docs.google.com/"+direct);
              //create the new connection
              HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
  
              //set up some things on the connection
              urlConnection.setRequestMethod("GET");
              urlConnection.setRequestProperty("Connection", "Keep-Alive");
              urlConnection.setRequestProperty("Content-Type", "application/xml");
              urlConnection.setDoOutput(true);
  
              //and connect!
              urlConnection.connect();
  
              //set the path where we want to save the file
              //in this case, going to save it on the root directory of the
              //sd card.
              File SDCardRoot = new File(Environment.getExternalStorageDirectory().getAbsoluteFile()+"/folder/");
              //create a new file, specifying the path, and the filename
              //which we want to save the file as.
              File file = new File(SDCardRoot,book.getBook_name()+".pdf");
  
              //this will be used to write the downloaded data into the file we created
              FileOutputStream fileOutput = new FileOutputStream(file);
  
              //this will be used in reading the data from the internet
              InputStream inputStream = urlConnection.getInputStream();
  
              //this is the total size of the file
               totalSize = urlConnection.getContentLength();
              //variable to store total downloaded bytes
  
              //create a buffer...
              byte[] buffer = new byte[1024];
              int bufferLength = 0; //used to store a temporary size of the buffer
  
              //now, read through the input buffer and write the contents to the file
              while ( (bufferLength = inputStream.read(buffer)) &gt; 0 ) {
                      //add the data in the buffer to the file in the file output stream (the file on the sd card
                      fileOutput.write(buffer, 0, bufferLength);
                      //add up the size so we know how much is downloaded
                      downloadedSize += bufferLength;
                      //this is where you would do something to report the prgress, like this maybe
                      publishProgress((downloadedSize*100)/totalSize);
              }
              //close the output stream when done
              fileOutput.close();
  
      //catch some possible errors...
      } catch (MalformedURLException e) {
              e.printStackTrace();
      } catch (IOException e) {
              e.printStackTrace();
      }
  </code></pre>