美文网首页
Android开发中如何实现http下载文件呢(磨砺营马剑威)

Android开发中如何实现http下载文件呢(磨砺营马剑威)

作者: 磨砺营IT | 来源:发表于2016-08-16 09:42 被阅读187次

    一、场景

    下载存文本文件和下载如mp3等大容量的文件

    界面

    二、代码编写

    1.AndroidMainfest.xml中配置

    主要是解决网络权限和写SDCard的权限

    package="linys.download" android:versionCode="1" android:versionName="1.0">

    2.Activity编写

    利用Http协议下载文件并存储到SDCard

    1.创建一个URL对象

    2.通过URL对象,创建一个HttpURLConnection对象

    3.得到InputStream

    4.从InputStream当中读取数据

    存到SDCard

    1.取得SDCard路径

    2.利用读取大文件的IO读法,读取文件

    package linys.download;

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.io.OutputStream;

    import java.net.HttpURLConnection;

    import java.net.MalformedURLException;

    import java.net.URL;

    import android.app.Activity;

    import android.os.Bundle;

    import android.os.Environment;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.widget.Button;

    /**

    *

    * @Project: Android_MyDownload

    * @Desciption: 利用Http协议下载文件并存储到SDCard

    1.创建一个URL对象

    2.通过URL对象,创建一个HttpURLConnection对象

    3.得到InputStream

    4.从InputStream当中读取数据

    存到SDCard

    1.取得SDCard路径

    2.利用读取大文件的IO读法,读取文件

    *

    * @Author: LinYiSong

    * @Date: 2011-3-25~2011-3-25

    */

    public class MyDownload extends Activity {

    private Button downFileBtn;

    private Button downMP3Btn;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    downFileBtn=(Button)this.findViewById(R.id.downFile);

    downMP3Btn=(Button)this.findViewById(R.id.downMP3);

    downFileBtn.setOnClickListener(new DownFileClickListener());

    downMP3Btn.setOnClickListener(new DownMP3ClickListener());

    }

    /**

    *

    * @Project: Android_MyDownload

    * @Desciption: 只能读取文本文件,读取mp3文件会出现内存溢出现象

    * @Author: LinYiSong

    * @Date: 2011-3-25~2011-3-25

    */

    class DownFileClickListener implements OnClickListener{

    @Override

    public void onClick(View v) {

    String urlStr="http://172.17.54.91:8080/download/down.txt";

    try {

    /*

    * 通过URL取得HttpURLConnection

    * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置

    *

    */

    URL url=new URL(urlStr);

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();

    //取得inputStream,并进行读取

    InputStream input=conn.getInputStream();

    BufferedReader in=new BufferedReader(new InputStreamReader(input));

    String line=null;

    StringBuffer sb=new StringBuffer();

    while((line=in.readLine())!=null){

    sb.append(line);

    }

    System.out.println(sb.toString());

    } catch (MalformedURLException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    /**

    *

    * @Project: Android_MyDownload

    * @Desciption: 读取任意文件,并将文件保存到手机SDCard

    * @Author: LinYiSong

    * @Date: 2011-3-25~2011-3-25

    */

    class DownMP3ClickListener implements OnClickListener{

    @Override

    public void onClick(View v) {

    String urlStr="http://172.17.54.91:8080/download/1.mp3";

    String path="file";

    String fileName="2.mp3";

    OutputStream output=null;

    try {

    /*

    * 通过URL取得HttpURLConnection

    * 要网络连接成功,需在AndroidMainfest.xml中进行权限配置

    *

    */

    URL url=new URL(urlStr);

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();

    //取得inputStream,并将流中的信息写入SDCard

    /*

    * 写前准备

    * 1.在AndroidMainfest.xml中进行权限配置

    *

    * 取得写入SDCard的权限

    * 2.取得SDCard的路径: Environment.getExternalStorageDirectory()

    * 3.检查要保存的文件上是否已经存在

    * 4.不存在,新建文件夹,新建文件

    * 5.将input流中的信息写入SDCard

    * 6.关闭流

    */

    String SDCard=Environment.getExternalStorageDirectory()+"";

    String pathName=SDCard+"/"+path+"/"+fileName;//文件存储路径

    File file=new File(pathName);

    InputStream input=conn.getInputStream();

    if(file.exists()){

    System.out.println("exits");

    return;

    }else{

    String dir=SDCard+"/"+path;

    new File(dir).mkdir();//新建文件夹

    file.createNewFile();//新建文件

    output=new FileOutputStream(file);

    //读取大文件

    byte[] buffer=new byte[4*1024];

    while(input.read(buffer)!=-1){

    output.write(buffer);

    }

    output.flush();

    }

    } catch (MalformedURLException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }finally{

    try {

    output.close();

    System.out.println("success");

    } catch (IOException e) {

    System.out.println("fail");

    e.printStackTrace();

    }

    }

    }

    }

    }

    更多内容关注微信公众号mjw-java或访问www.moliying.com

    相关文章

      网友评论

          本文标题:Android开发中如何实现http下载文件呢(磨砺营马剑威)

          本文链接:https://www.haomeiwen.com/subject/dykpsttx.html