2015-12-30 134 views
0

我從url寫了這個代碼下載pdf和文件url是這個 -下載PDF文件並將其保存到SD卡

String fileURL= "http://www.vivekananda.net/PDFBooks/History_of_India.pdf"; 

代碼這個

public static void DownloadFile(String fileURL, File directory) { 

    try { 

     FileOutputStream f = new FileOutputStream(directory); 
     URL u = new URL(fileURL); 
     HttpURLConnection c = (HttpURLConnection) u.openConnection(); 
     c.setRequestMethod("GET"); 
     c.setDoOutput(true); 
     c.getResponseCode(); 
     c.connect(); 

     InputStream in = c.getInputStream(); 

     byte[] buffer = new byte[1024]; 
     int len1 = 0; 
     while ((len1 = in.read(buffer)) > 0) { 
      f.write(buffer, 0, len1); 
     } 
     f.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

但這種表演文件沒有找到與響應代碼405的異常。我不知道爲什麼發生這種情況。請幫助..!

這是我的代碼,我不得不創建SD文件卡 -

代碼這個

public void createPdfFile(){ 
     String extStorageDirectory = Environment.getExternalStorageDirectory() 
       .toString(); 
       File folder = new File(extStorageDirectory, "pdf"); 
       folder.mkdir(); 
       file = new File(folder, "storrage_data.pdf"); 
       try { 
        file.createNewFile(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       }   
    }` 

這個我打電話從線程的onResume這樣的下載方法後();怎麼一回事,因爲從的onCreate它會給錯誤「網絡在主線程上」。凡我錯了,現在我卻不知道:(

代碼這個

public void downloadFile(){   

    new Thread(new Runnable() { 

      @Override 
      public void run() {    
     Downloader.DownloadFile(url, file); 
      showPdf(); 

      } 
     }).start(); 


    } 

回答

0

你的代碼是正確的。現在你需要將您的PDF文件下載到外部存儲器或任何你想下載並保存的地方

1

可能的原因是你想要不存在的文件夾首先檢查它是否存在如果沒有創建它然後創建文件輸出流並寫信給它。

+0

你在「目錄」參數中發送了什麼? – priyanka

+0

創建文件的路徑。使用的代碼在上面.. !! –

0

刪除此代碼並重試。

//c.setRequestMethod("GET"); //c.setDoOutput(true); //c.getResponseCode(); //c.connect();

我認爲URL.openConnection()有連接的描述了,所以c.connect()是沒有必要的。

+0

我正在使用Thread.Please檢查以上更新..! –

+0

它已經完成。發生錯誤是因爲pdf url不正確.. !! –

+0

你的意思是'String fileURL =「http://www.vivekananda.net/PDFBooks/History_of_India.pdf」;'不正確?但我使用這個網址... – Kae10

0

我建議你使用DownloadManager。下載過程中出現的問題太多,無法自行處理。只是想到在下載過程中暫時失去連接... 下面是我從應用程序中拉出的一些代碼,稍作修改以擺脫不需要的部分。

public void downloadAndOpenPdf(String url,final File file) { 
    if(!file.isFile()) { 
     DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
     DownloadManager.Request req = new DownloadManager.Request(Uri.parse(url)); 
     req.setDestinationUri(Uri.fromFile(file)); 
     req.setTitle("Some title"); 

     BroadcastReceiver receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       unregisterReceiver(this); 
       if (file.exists()) { 
        openPdfDocument(file); 
       } 
      } 
     }; 
     registerReceiver(receiver, new IntentFilter(
       DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 
     dm.enqueue(req); 
     Toast.makeText(this, "Download started", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     openPdfDocument(file); 
    } 
} 

public boolean openPdfDocument(File file) { 
    Intent target = new Intent(Intent.ACTION_VIEW); 
    target.setDataAndType(Uri.fromFile(file), "application/pdf"); 
    target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    try { 
     startActivity(target); 
     return true; 
    } catch (ActivityNotFoundException e) { 
     Toast.makeText(this,"No PDF reader found",Toast.LENGTH_LONG).show(); 
     return false; 
    } 

} 
+0

我必須在文件參數中給出什麼?如果你正在談論在SD卡中創建的文件,所以它將是空的,直到文件下載。您可以發送完整的代碼下載並保存在SD卡中的PDF然後打開它。 –

+0

它是保存下載的PDF的地方。檢查它不存在是爲了防止用戶再次下載同一文件。在我的應用程序中,URL和文件名之間存在一對一的映射關係,因此如果文件存在,則該URL將在早期下載。 – Rediska