Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 2120|回复: 0

在http协议下使用HttpUrlConnection对象获得InputStream对象将文件

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-8-23 14:00:03 | 显示全部楼层 |阅读模式
    1,文件下载的步骤
    (1)创建一个httpURLConnection对象
    HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
    (2)获得一个InputStream对象
    urlConn.getInputStream()
    (3)访问网络的权限
    android.permission.INTERNET

    2,实例如下
    (1)新建一个项目,命名为download,包名为com.zhangjie.download,Activity的名字为download
    (2)在main.xml中创建两个按钮,名字分别为:downloadTxt 和 downloadMp3:
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:orientation="vertical"
    4.     android:layout_width="fill_parent"
    5.     android:layout_height="fill_parent"
    6.     >
    7. <Button
    8.     android:id="@+id/downloadTxt"
    9.     android:layout_width="fill_parent"
    10.     android:layout_height="wrap_content"
    11.     android:text="downloadTxt"
    12. />   
    13. <Button
    14.     android:id="@+id/downloadMp3"
    15.     android:layout_width="fill_parent"
    16.     android:layout_height="wrap_content"
    17.     android:text="downloadMp3"
    18. />
    19. </LinearLayout>
    复制代码


    新建一个java类,命名为FileUtils.java将io流写入sd卡:
    1. package com.zhangjie.utils;
    2. import java.io.File;
    3. import java.io.FileOutputStream;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.io.OutputStream;
    7. import android.os.Environment;
    8. public class FileUtils {
    9. private String SDPATH;
    10. public String getSDPATH() {
    11.   return SDPATH;
    12. }
    13. public FileUtils(){
    14.   //得到当前外部存储设备SD卡的目录
    15.   SDPATH = Environment.getExternalStorageDirectory()+"/";
    16. }
    17. /*
    18.   * 在SD卡上创建文件
    19.   */
    20. public File createSDFile(String fileName) throws IOException{
    21.   File file = new File(SDPATH+fileName);
    22.   file.createNewFile();
    23.   return file;
    24. }
    25. /*
    26.   * 在SD卡上创建目录
    27.   */
    28. public File createSDDir(String dirName){
    29.   File dir = new File(SDPATH+dirName);
    30.   dir.mkdir();
    31.   return dir;
    32. }
    33. /*
    34.   * 判断SD卡上的文件夹是否存在
    35.   */
    36. public boolean isFileExist(String fileName){
    37.   File file = new File(SDPATH+fileName);
    38.   return file.exists();
    39. }
    40. /*
    41.   * 将一个InputStream里面的数据写入到SD卡中
    42.   */
    43. public File write2SDFromInput(String path,String fileName,InputStream input){
    44.   File file = null;
    45.   OutputStream output = null;
    46.   try{
    47.    createSDDir(path);
    48.    file = createSDFile(path+fileName);
    49.    output = new FileOutputStream(file);
    50.    byte buffer [] = new byte[4*1024];
    51.    while((input.read(buffer)) != -1){
    52.     output.write(buffer);
    53.    }
    54.    output.flush();
    55.   }catch(Exception e){
    56.    e.printStackTrace();
    57.   }finally{
    58.    try{
    59.     output.close();
    60.    }catch(Exception e){
    61.     e.printStackTrace();
    62.    }
    63.   }
    64.   return file;
    65. }
    66. }
    复制代码


    再新建一个java类命名为HttpDownloader.java根据url获得io数据流并调用FiletUtils.java中的方法写入SD卡:
    1. package com.zhangjie.utils;
    2. import java.io.BufferedReader;
    3. import java.io.File;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.io.InputStreamReader;
    7. import java.net.HttpURLConnection;
    8. import java.net.URL;
    9. import org.apache.http.auth.MalformedChallengeException;
    10. public class HttpDownloader {
    11. private URL url = null;
    12. /*
    13.   * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
    14.   * 1,创建一个URL对象
    15.   * 2,通过URL对象,创建一个HttpURLConnection对象
    16.   * 3,得到InputStream
    17.   * 4,从InputStream当中读取数据
    18.   */
    19. public String download(String urlStr){
    20.   StringBuffer sb = new StringBuffer();
    21.   String line = null;
    22.   BufferedReader buffer = null;
    23.   try{
    24.    //创建一个URL对象
    25.    url = new URL(urlStr);
    26.    //创建一个Http连接
    27.    HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
    28.    //使用IO流读取数据,InputStreamReader将字节读为字符,buffer使用readLine方法一行一行读出来
    29.    buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
    30.    while((line = buffer.readLine()) != null){
    31.     sb.append(line);
    32.    }
    33.   }catch(Exception e){
    34.    e.printStackTrace();
    35.   }finally{
    36.    try{
    37.     buffer.close();
    38.    }catch(Exception e){
    39.     e.printStackTrace();
    40.    }
    41.   }
    42.   return sb.toString();
    43. }
    44. /*
    45.   * 该函数下载mp3文件 返回整形  -1:代表下载文件出错, 0:代表下载文件成功 1:代表文件已经存在
    46.   */
    47. public int downFile(String urlStr,String path,String fileName){
    48.   InputStream inputStream = null;
    49.   try{
    50.    FileUtils fileUtils = new FileUtils();
    51.    
    52.    if(fileUtils.isFileExist(path+fileName)){
    53.     return 1;
    54.    }else{
    55.     inputStream = getInputStreamFromUrl(urlStr);
    56.     File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);
    57.     if(resultFile == null){
    58.      return -1;
    59.     }
    60.    }
    61.   }catch(Exception e){
    62.    e.printStackTrace();
    63.    return -1;
    64.   }finally{
    65.    try{
    66.     inputStream.close();
    67.    }catch(Exception e){
    68.     e.printStackTrace();
    69.    }
    70.   }
    71.   return 0;
    72. }
    73. /*
    74.   * 根据URL得到输入流
    75.   */
    76. public InputStream getInputStreamFromUrl(String urlStr) throws MalformedChallengeException,IOException{
    77.   url = new URL(urlStr);
    78.   HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
    79.   InputStream inputStream = urlConn.getInputStream();
    80.   return inputStream;
    81. }
    82. }
    复制代码


    在activity中根据ID得到Button对象,并设置这两个按钮的监听器,在监听器中的OnClick()方法中,将url传入HttpDownloader类的方法中,将io流写入文件或输出到LogCat:
    1. package com.zhangjie.download;
    2. import com.zhangjie.utils.HttpDownloader;
    3. import android.app.Activity;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.view.View.OnClickListener;
    7. import android.widget.Button;
    8. public class Download extends Activity {
    9. private Button downloadTxtButton;
    10. private Button downloadMp3Button;
    11.     @Override
    12.     public void onCreate(Bundle savedInstanceState) {
    13.         super.onCreate(savedInstanceState);
    14.         setContentView(R.layout.main);
    15.         downloadTxtButton = (Button)findViewById(R.id.downloadTxt);
    16.         downloadTxtButton.setOnClickListener(new DownLoadTxtListener());
    17.         downloadMp3Button = (Button)findViewById(R.id.downloadMp3);
    18.         downloadMp3Button.setOnClickListener(new DownLoadMp3Listener());
    19.     }
    20.      
    21.     class DownLoadTxtListener implements OnClickListener{
    22.   @Override
    23.   public void onClick(View v) {
    24.    HttpDownloader httpDownloader = new HttpDownloader();
    25.    String robot = httpDownloader.download("http://www.javaxxz.com/robots.txt");
    26.    System.out.println(robot);
    27.   }
    28.     }
    29.      
    30.     class DownLoadMp3Listener implements OnClickListener{
    31.   @Override
    32.   public void onClick(View v) {
    33.    HttpDownloader httpDownloader = new HttpDownloader();
    34.    int result = httpDownloader.downFile("http://www.javaxxz.com/robots.mp3", "music/", "down.mp3");
    35.    System.out.println(result);
    36.   }
    37.     }
    38. }
    复制代码


    最后是需要在AndroidManifest.xml中设置可访问网络的权限和可读写sd卡的权限:
    1.     <!-- 可以访问网络 -->
    2.     <uses-permission android:name="android.permission.INTERNET"/>
    3.     <!-- 可以写入sd卡 -->
    4.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>     
    复制代码


    效果如下:



    当单击“downloadTxt”后,LogCat中输出:
    08-23 13:05:23.970: INFO/System.out(414): ## robots.txt for PHPWind# Version 8.0#User-agent: *Disallow: /admin/Disallow: /api/Disallow: /apps/Disallow: /p_w_upload/Disallow: /data/Disallow: /hack/Disallow: /p_w_picpath/Disallow: /ipdata/Disallow: /js/Disallow: /lang/Disallow: /lib/Disallow: /mode/Disallow: /require/Disallow: /template/Disallow: /active.phpDisallow: /admin.phpDisallow: /ajax.phpDisallow: /ck.phpDisallow: /forumcp.phpDisallow: /job.phpDisallow: /member.phpDisallow: /message.phpDisallow: /post.phpDisallow: /profile.phpDisallow: /pw_ajax.phpDisallow: /pw_api.phpDisallow: /pw_app.phpDisallow: /survey.php

    robots.txt中的内容:



    当单击“downloadMp3”后,LogCat中输出:
    08-23 13:25:14.011: INFO/System.out(956): 0

    表示文件下载成功!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    该用户从未签到

    发表于 2011-9-27 04:13:22 | 显示全部楼层
    联系电话【13692278253】刘生【QQ:879631858】本公司长期开增值,普通发票★验后付款★

        ★信誉第一★代理增值税,商品销售,服务,建筑安装工程,运输业,广告业,海关缴款书,煤炭,

        钢材,钢铁,商业统一,国际货运,建材,酒店,住宿,办公用品,劳保用品,设计费,咨询费,机械械设备,

        服装费,制作费,房屋租赁,汽车配件,装修,装饰,医疗器械,汽车用品,石材,石子,纺织,展览费,礼品

        ,货运,国税,地税,定额,工程款,材料款,机动车销售,人工费,劳保费,个人税,租赁,场地租赁.

        联系电话【13692278253】刘生
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2012-3-15 15:58:59 | 显示全部楼层
    还挺不错的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2012-4-25 22:31:28 | 显示全部楼层
    谢谢楼主分享啊。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-12 00:46 , Processed in 0.417894 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表