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
- Android 檔案儲存Android
- rac歸檔模式/非歸檔模式下檔案建至本地儲存修復方法-ORA-01157模式
- 根據網路連線(檔案連結)下載檔案到本地
- Android 檔案儲存淺析Android
- Android 下載Zip檔案,並解壓到本地Android
- 使用canvas儲存網頁為pdf檔案支援跨域Canvas網頁跨域
- Android中的資料儲存之檔案儲存Android
- Flutter學習指南:檔案、儲存和網路Flutter
- 如何將html程式碼儲存為Pdf檔案HTML
- jmeter儲存下載的檔案到本地JMeter
- 【Python3網路爬蟲開發實戰】5-資料儲存-1 檔案儲存-2 JSON檔案儲存Python爬蟲JSON
- 使用 JDAudioCrawler 將下載的音訊儲存到本地儲存音訊
- SingleFile:將整個網頁完整下載儲存到本地一個HTML檔案中網頁HTML
- 塊儲存 檔案儲存 物件儲存物件
- SingleFile:將網頁像快照一樣下載儲存到本地一個HTML檔案中網頁HTML
- 檔案儲存
- 資料儲存--檔案儲存
- 儲存CSDN 中的部落格文章為本地檔案
- MOSAD_HW3 網路訪問和本地儲存
- Android儲存多張圖片到本地Android
- 搜尋本地pdf檔案內容
- spark在IDEA的本地無法使用saveAsTextFile儲存檔案SparkIdeaAST
- 前端js儲存頁面為圖片下載到本地前端JS
- C#/VB.NET 將OFD儲存為PDF檔案流C#
- HttpURLConnection 實戰Get/Post 請求並且儲存PDF檔案HTTP
- Dropshare 5 Mac下載,網路檔案安全共享Mac
- CSV檔案儲存
- 儲存json檔案JSON
- Windows系統電腦不能載入本地儲存的配置檔案的解決方法Windows
- 軟體管理,磁碟儲存,檔案系統以及網路協議協議
- Flutter持久化儲存之檔案儲存Flutter持久化
- 【Python3網路爬蟲開發實戰】5-資料儲存-1 檔案儲存-1 TXT文字儲存Python爬蟲
- Java後臺返回PDF檔案預覽下載Java
- 怎麼看jupyter的檔案儲存路徑
- 本地MinIO儲存服務Java遠端呼叫上傳檔案Java
- 部落格一鍵儲存本地exe視覺化介面檔案視覺化