2016-09-29 137 views
0

即時製作一個android應用程序從android下載pdf文件,然後將它們保存在內部或外部memory.but有時由於互聯網連接下載下載停止沒有finshing.like文件大小爲1.1MB,它的唯一下載高達750kb。現在的問題是,文件是否完全下載或不是我的應用程序將其顯示爲下載,但實際上它不是。因此,我想知道文件befor的確切大小和下載後,以便我可以找到文件是否完全下載。並想重新開始下載。 任何人可以幫助我........ 我的代碼如何知道下載文件的大小在下載之前和之後android

String DownloadUrl = "http://www.example.com/books/"+book_name; 
          String fileName = book_name; 


          URL url = new URL(DownloadUrl); 

//create the new connection 





          HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

//set up some things on the connection 

          urlConnection.setRequestMethod("GET"); 

          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("/storage/emulated/0/documents/docx/stuff/"); 

          File SDCardRoot = new File(Environment.getExternalStorageDirectory()+File.separator+"MybookStore/paper/paperStuff/documents/docx/other/stuff/"); 
//create a new file, specifying the path, and the filename 

//which we want to save the file as. 

          File file = new File(SDCardRoot,fileName); 

          String file_size = Long.toString(file.length()/1024); 

          int size_file=Integer.parseInt(file_size); 
//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 

          int totalSize = urlConnection.getContentLength(); 

//variable to store total downloaded bytes 

          int downloadedSize = 0; 

//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)) > 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; 

           int progress=(int)(downloadedSize*100/totalSize); 

//this is where you would do something to report the prgress, like this maybe 

//updateProgress(downloadedSize, totalSize); 

          } 

我的代碼

+0

是否使用'android.app.DownloadManager'? – betorcs

+0

分享代碼如何下載和跟蹤下載的文件? – NightFury

+0

我編輯code.plz現在看@ NightFury –

回答

0

任何合理的服務器響應頭將包括Content-Length關鍵,這將有望代表的全長您正在嘗試下載的資源。

考慮到這一點,這裏有一個簡單的例子:

HttpURLConnection connection = null; 
InputStream input = null; 
OutputStream output = null; 

try { 
    final URL url = new URL(resourceUrl); 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.connect(); 

    final int length = connection.getContentLength(); 
    int downloaded = 0; 

    input = url.openStream(); 
    output = new FileOutputStream(targetFile); 

    final byte[] buffer = new byte[BUFFER_SIZE]; 
    int read; 
    while ((read = input.read(buffer)) != -1) { 
    output.write(buffer, 0, read); 
    downloaded += read; 
    } 

    if (downloaded == length) { 
    // The file was successfully downloaded. 
    } else { 
    // The file was not fully downloaded. 
    } 
} catch (IOException e) { 
    // Handle exception. 
} finally { 
    // Close resources. 
} 
相關問題