现在的位置: 首页 > 综合 > 正文

Android 随手记—-从服务器下载文件保存到sd卡

2018年02月17日 ⁄ 综合 ⁄ 共 3590字 ⁄ 字号 评论关闭

本代码是通过http协议实现文件下载,记得在配置文件中加入对SD卡的读写权限和联网权限

先来Activity代码

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class AndroidTestActivity extends Activity {
    /** Called when the activity is first created. */
    private Button down;
    private HttpDown http;
    private String msg;
    //下载进度条
    private ProgressDialog mSaveDialog = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        down = (Button) findViewById(R.id.down);
        down.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                
                mSaveDialog = ProgressDialog.show(AndroidTestActivity.this, "下载文件", "文件正在保存中,请稍等...", true);  
                //开启一个新的线程执行下载任务
                new Thread(
                        new Runnable() {
                            
                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                http = new HttpDown();
                                //获得SD卡路径
                                String sdpath = Environment.getExternalStorageDirectory()+"/DRMP/";
                                String str = "http://music.baidu.com/data/music/file?link=http://zhangmenshiting.baidu.com/data2/music/106150597/10090002354000128.mp3?xcode=56ea6c3d5f9b569dfbe9ff93fd6d8248075fef7b4684889d&song_id=100900023";                  
             
                                msg = http.download(str, sdpath, "1234.mp3");
                                messageHandler.sendMessage(messageHandler.obtainMessage());
                            }
                        }
                    ).start();
            }
        });
    }
    
    private Handler messageHandler = new Handler(){
        public void handleMessage(Message me){
            mSaveDialog.dismiss();
            Toast.makeText(AndroidTestActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    };
}

file工具类

/**
 *
 */
package com.wu;

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

/**
 * @author wu
 *
 */
public class HttpDown {

    /**
     *
     * @param strurl 文件url地址
     * @param path 需要保存文件的路径
     * @param fileName 保存到本地的文件名
     * @return
     */
    public String download(String strurl,String path,String fileName){
        
        InputStream is = null;
        OutputStream os = null;
        URL url = null;
        try {
            //创建文件夹
            File f = new File(path);
            if(!f.exists()){
                f.mkdir();
            }
            //创建文件
            File file = new File(path+fileName);
            //判断是否存在文件
            if(file.exists()){
                //创建新文件
                file.createNewFile();
            }else{
                file.delete();
                file.createNewFile();
            }
            //创建并打开连接
            url = new URL(strurl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //文件输入流
            is = conn.getInputStream();            
            //输出流
            os = new FileOutputStream(file);
            byte buffer[] = new byte[1024];
            int len =0 ;
            while( (len = is.read(buffer))!= -1){
                os.write(buffer,0,len);
            }
            os.flush();
            return "success";
        } catch (IOException e) {
                // TODO Auto-generated catch block
            e.printStackTrace();
            return "failure";
        }finally{
            try{
                os.close();
                is.close();
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
        
    }
}

抱歉!评论已关闭.