Android 下载服务器文件 httpurl

1、简介

下载网络服务器上的文件

2、文件结构

在这里插入图片描述

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 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 典型技术模块开发详解》

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

猜你喜欢

转载自blog.csdn.net/qq_27061049/article/details/84664905