Android下載網路pdf檔案儲存至本地
/**
* 檔案下載工具類(單例模式)
*/
public class DownloadUtil {
private static DownloadUtil downloadUtil;
private final OkHttpClient okHttpClient;
public static DownloadUtil get() {
if (downloadUtil == null) {
downloadUtil = new DownloadUtil();
}
return downloadUtil;
}
private DownloadUtil() {
okHttpClient = new OkHttpClient();
}
/**
* @param url 下載連線
* @param destFileDir 下載的檔案儲存目錄
* @param destFileName 下載檔名稱
* @param listener 下載監聽
*/
public void download(final String url, final String destFileDir, final String destFileName, final OnDownloadListener listener) {
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 下載失敗監聽回撥
listener.onDownloadFailed(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream is = null;
byte[] buf = new byte[2048];
int len = 0;
FileOutputStream fos = null;
// 儲存下載檔案的目錄
File dir = new File(destFileDir);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, destFileName);
try {
is = response.body().byteStream();
long total = response.body().contentLength();
fos = new FileOutputStream(file);
long sum = 0;
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
sum += len;
int progress = (int) (sum * 1.0f / total * 100);
// 下載中更新進度條
listener.onDownloading(progress);
}
fos.flush();
// 下載完成
listener.onDownloadSuccess(file);
} catch (Exception e) {
listener.onDownloadFailed(e);
} finally {
try {
if (is != null)
is.close();
} catch (IOException e) {
}
try {
if (fos != null)
fos.close();
} catch (IOException e) {
}
}
}
});
}
public interface OnDownloadListener {
/**
* @param file 下載成功後的檔案
*/
void onDownloadSuccess(File file);
/**
* @param progress 下載進度
*/
void onDownloading(int progress);
/**
* @param e 下載異常資訊
*/
void onDownloadFailed(Exception e);
}
}
@Override
public void onmenuclick(int id, String name, String url) {
if (TextUtils.isEmpty(url)) {
ToastUtil.show("未發現下載文件");
return;
} else {
downFile(name, url);
}
}
});
/**
* 下載檔案
*
* @param name
* @param urlString
*/
public void downFile(String name, String urlString) {
DownloadUtil.get().download(urlString, Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Download", name + ".pdf", new DownloadUtil.OnDownloadListener() {
@Override
public void onDownloadSuccess(File file) {
Log.v(TAG, "下載成功,檔案已存入手機內部儲存裝置根目錄下Download資料夾中");
Looper.prepare();//增加部分
Looper.loop();//增加部分
}
@Override
public void onDownloading(int progress) {
Log.v(TAG, "下載進度" + progress);
// progressDialog.setProgress(progress);
}
@Override
public void onDownloadFailed(Exception e) {
// if (progressDialog != null && progressDialog.isShowing()) {
// progressDialog.dismiss();
// }
}
});
}
相關文章
- 如何將MAC的檔案儲存至NAS網路儲存?Mac
- Android從外部儲存裝置中儲存和載入本地檔案Android
- 儲存檔案到本地
- store下載檔案儲存位置
- 根據網路連線(檔案連結)下載檔案到本地
- 快速理解Android檔案儲存路徑Android
- Android 檔案儲存Android
- android: 檔案儲存Android
- 使用canvas儲存網頁為pdf檔案支援跨域Canvas網頁跨域
- rac歸檔模式/非歸檔模式下檔案建至本地儲存修復方法-ORA-01157模式
- Android 下載Zip檔案,並解壓到本地Android
- Flutter學習指南:檔案、儲存和網路Flutter
- jmeter儲存下載的檔案到本地JMeter
- 如何將html程式碼儲存為Pdf檔案HTML
- Android okHttp網路請求之檔案上傳下載AndroidHTTP
- Android 檔案儲存淺析Android
- iscsi 掛載網路儲存及儲存訪問
- iOS開發網路篇之檔案下載、大檔案下載、斷點下載iOS斷點
- 載入和儲存properties檔案
- Android中的資料儲存之檔案儲存Android
- 使用 JDAudioCrawler 將下載的音訊儲存到本地儲存音訊
- android下根據路徑不同拷貝檔案至指定路徑Android
- 【usb儲存掛載】android6.0固定usb儲存掛載路徑Android
- SingleFile:將整個網頁完整下載儲存到本地一個HTML檔案中網頁HTML
- Android將程式崩潰資訊儲存本地檔案傳送至伺服器Android伺服器
- 淺談Android的檔案儲存Android
- Android儲存讀取txt檔案Android
- Android資料儲存之Android 6.0執行時許可權下檔案儲存的思考Android
- 塊儲存 檔案儲存 物件儲存物件
- Asp.net直接儲存(下載)檔案到客戶端ASP.NET客戶端
- 儲存CSDN 中的部落格文章為本地檔案
- vista alv儲存本地檔案錯誤
- SingleFile:將網頁像快照一樣下載儲存到本地一個HTML檔案中網頁HTML
- 【Python3網路爬蟲開發實戰】5-資料儲存-1 檔案儲存-2 JSON檔案儲存Python爬蟲JSON
- 前端js儲存頁面為圖片下載到本地前端JS
- 檔案儲存
- 資料儲存--檔案儲存
- ASP.NET下載檔案(彈出開啟儲存檔案對話方塊)ASP.NET