Android 网络下载文件 图片 httpurl
  HvTJUzsxOBtS 2023年11月25日 24 0



文章目录

  • 1、简介
  • 2、文件结构
  • 3、AndroidMainfest 添加权限
  • 4、MainActivity 实现
  • 5、效果显示


1、简介

下载网络服务器上的文件 或者 图片 两者相似

2、文件结构

Android  网络下载文件 图片 httpurl_文件名

3、AndroidMainfest 添加权限
<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
4、MainActivity 实现
package com.example.tssh.mydownloadfile;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private String  TAG = "MainActivity: ";

    private String  urlLoadPath = "http://dl.kkdownload.com/kz2sem2/KuaiZip_Setup_sem2_604.exe";  //下载的文件 网络地址
    private String savaDirPath = "testLoad";  //保存的地址
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //先去检查有没有相应权限
        CheckThread checkThread  = new CheckThread();
        checkThread.start();
        try {
            checkThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(new Runnable() {
            @Override
            public void run() {
                DownLoadFileFormUrl(urlLoadPath,savaDirPath); //调用下载函数
            }
        }).start();

    }


    public boolean DownLoadFileFormUrl(String urlLoadPath, String savaDirPath){
        InputStream inputStream = null;
        FileOutputStream fileOutputStream = null;
        HttpURLConnection httpURLConnection = null;

        if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            Log.i(TAG," 未安装 SD 卡");
            return  false;
        }
        File pathSd = Environment.getExternalStorageDirectory();  //获取 SD 卡路径
        File fileRealDirectoty  = new File(pathSd.getAbsolutePath() + File.separator + savaDirPath);
        Log.i(TAG,"文件保存的真正目录: " + fileRealDirectoty);
        if (!fileRealDirectoty.exists()) {  //如果目录 不存在 ,就创建
            Log.i(TAG,"创建 存储文件夹");
            fileRealDirectoty.mkdirs();
        }
        //获取要下载的文件名称,在这里可以更改下载的文件名
        String fileName = urlLoadPath.substring(urlLoadPath.lastIndexOf("/") + 1);
        //String fileName = "test.zip";
        //创建 这个文件名 命名的 file 对象
        File file = new File(fileRealDirectoty,fileName);
        Log.i(TAG,"file: " + file);
        if (!file.exists()) {  //倘若没有这个文件
            try {
                Log.i(TAG,"创建文件");
                file.createNewFile();  //创建这个文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            URL url = new URL(urlLoadPath);
            httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.connect();
              int code = httpURLConnection.getResponseCode();
              if (code == 200 ) {
              //网络连接成功 
              } else {
              //网络返回异常
              }
            //根据响应获取文件大小
            int fileSize = httpURLConnection.getContentLength();
            Log.i(TAG,"文件大小: " + fileSize);
            inputStream = httpURLConnection.getInputStream();
            fileOutputStream = new FileOutputStream(file);
            byte[] b = new byte[1024];
            int tem = 0;
            while ((tem = inputStream.read(b))!= -1) {
                fileOutputStream.write(b,0,tem);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }

                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }

                if (httpURLConnection != null) {
                    httpURLConnection.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        Log.i(TAG,"文件下载 成功");
        return true;
    }



    //sd 卡权限申请
    private void checkPermission() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]
                    {Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        if(requestCode == 100){
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.d(TAG, "");

            }
        }
    }

    public  class CheckThread  extends  Thread{
        public void run() {
           checkPermission();
        }
    }
}
5、效果显示

Android  网络下载文件 图片 httpurl_httpurl_02

文件参考:
《Android 典型技术模块开发详解》

本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   112   0   0 Java
  8s1LUHPryisj   2024年05月17日   47   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
HvTJUzsxOBtS