Android利用Http下载文件

一、场景

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

界面


Android利用Http下载文件_第1张图片

二、代码编写

1.AndroidMainfest.xml中配置

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

Java代码 复制代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="linys.download"android:versionCode="1"android:versionName="1.0">
  4. <uses-sdkandroid:minSdkVersion="8"/>
  5. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  6. <activityandroid:name=".Download"android:label="@string/app_name">
  7. <intent-filter>
  8. <actionandroid:name="android.intent.action.MAIN"/>
  9. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  10. </intent-filter>
  11. </activity>
  12. </application>
  13. <!--访问网络和操作SD卡加入的两个权限配置-->
  14. <uses-permissionandroid:name="android.permission.INTERNET"/>
  15. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  16. </manifest>

2.Activity编写

利用Http协议下载文件并存储到SDCard
1.创建一个URL对象
2.通过URL对象,创建一个HttpURLConnection对象
3.得到InputStream
4.从InputStream当中读取数据
存到SDCard
1.取得SDCard路径
2.利用读取大文件的IO读法,读取文件

Java代码 复制代码 收藏代码
  1. packagelinys.download;
  2. importjava.io.BufferedReader;
  3. importjava.io.File;
  4. importjava.io.FileOutputStream;
  5. importjava.io.IOException;
  6. importjava.io.InputStream;
  7. importjava.io.InputStreamReader;
  8. importjava.io.OutputStream;
  9. importjava.net.HttpURLConnection;
  10. importjava.net.MalformedURLException;
  11. importjava.net.URL;
  12. importandroid.app.Activity;
  13. importandroid.os.Bundle;
  14. importandroid.os.Environment;
  15. importandroid.view.View;
  16. importandroid.view.View.OnClickListener;
  17. importandroid.widget.Button;
  18. /**
  19. *
  20. *@Project:Android_MyDownload
  21. *@Desciption:利用Http协议下载文件并存储到SDCard
  22. 1.创建一个URL对象
  23. 2.通过URL对象,创建一个HttpURLConnection对象
  24. 3.得到InputStream
  25. 4.从InputStream当中读取数据
  26. 存到SDCard
  27. 1.取得SDCard路径
  28. 2.利用读取大文件的IO读法,读取文件
  29. *
  30. *@Author:LinYiSong
  31. *@Date:2011-3-25~2011-3-25
  32. */
  33. publicclassMyDownloadextendsActivity{
  34. privateButtondownFileBtn;
  35. privateButtondownMP3Btn;
  36. /**Calledwhentheactivityisfirstcreated.*/
  37. @Override
  38. publicvoidonCreate(BundlesavedInstanceState){
  39. super.onCreate(savedInstanceState);
  40. setContentView(R.layout.main);
  41. downFileBtn=(Button)this.findViewById(R.id.downFile);
  42. downMP3Btn=(Button)this.findViewById(R.id.downMP3);
  43. downFileBtn.setOnClickListener(newDownFileClickListener());
  44. downMP3Btn.setOnClickListener(newDownMP3ClickListener());
  45. }
  46. /**
  47. *
  48. *@Project:Android_MyDownload
  49. *@Desciption:只能读取文本文件,读取mp3文件会出现内存溢出现象
  50. *@Author:LinYiSong
  51. *@Date:2011-3-25~2011-3-25
  52. */
  53. classDownFileClickListenerimplementsOnClickListener{
  54. @Override
  55. publicvoidonClick(Viewv){
  56. StringurlStr="http://172.17.54.91:8080/download/down.txt";
  57. try{
  58. /*
  59. *通过URL取得HttpURLConnection
  60. *要网络连接成功,需在AndroidMainfest.xml中进行权限配置
  61. *<uses-permissionandroid:name="android.permission.INTERNET"/>
  62. */
  63. URLurl=newURL(urlStr);
  64. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  65. //取得inputStream,并进行读取
  66. InputStreaminput=conn.getInputStream();
  67. BufferedReaderin=newBufferedReader(newInputStreamReader(input));
  68. Stringline=null;
  69. StringBuffersb=newStringBuffer();
  70. while((line=in.readLine())!=null){
  71. sb.append(line);
  72. }
  73. System.out.println(sb.toString());
  74. }catch(MalformedURLExceptione){
  75. e.printStackTrace();
  76. }catch(IOExceptione){
  77. e.printStackTrace();
  78. }
  79. }
  80. }
  81. /**
  82. *
  83. *@Project:Android_MyDownload
  84. *@Desciption:读取任意文件,并将文件保存到手机SDCard
  85. *@Author:LinYiSong
  86. *@Date:2011-3-25~2011-3-25
  87. */
  88. classDownMP3ClickListenerimplementsOnClickListener{
  89. @Override
  90. publicvoidonClick(Viewv){
  91. StringurlStr="http://172.17.54.91:8080/download/1.mp3";
  92. Stringpath="file";
  93. StringfileName="2.mp3";
  94. OutputStreamoutput=null;
  95. try{
  96. /*
  97. *通过URL取得HttpURLConnection
  98. *要网络连接成功,需在AndroidMainfest.xml中进行权限配置
  99. *<uses-permissionandroid:name="android.permission.INTERNET"/>
  100. */
  101. URLurl=newURL(urlStr);
  102. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  103. //取得inputStream,并将流中的信息写入SDCard
  104. /*
  105. *写前准备
  106. *1.在AndroidMainfest.xml中进行权限配置
  107. *<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  108. *取得写入SDCard的权限
  109. *2.取得SDCard的路径:Environment.getExternalStorageDirectory()
  110. *3.检查要保存的文件上是否已经存在
  111. *4.不存在,新建文件夹,新建文件
  112. *5.将input流中的信息写入SDCard
  113. *6.关闭流
  114. */
  115. StringSDCard=Environment.getExternalStorageDirectory()+"";
  116. StringpathName=SDCard+"/"+path+"/"+fileName;//文件存储路径
  117. Filefile=newFile(pathName);
  118. InputStreaminput=conn.getInputStream();
  119. if(file.exists()){
  120. System.out.println("exits");
  121. return;
  122. }else{
  123. Stringdir=SDCard+"/"+path;
  124. newFile(dir).mkdir();//新建文件夹
  125. file.createNewFile();//新建文件
  126. output=newFileOutputStream(file);
  127. //读取大文件
  128. byte[]buffer=newbyte[4*1024];
  129. while(input.read(buffer)!=-1){
  130. output.write(buffer);
  131. }
  132. output.flush();
  133. }
  134. }catch(MalformedURLExceptione){
  135. e.printStackTrace();
  136. }catch(IOExceptione){
  137. e.printStackTrace();
  138. }finally{
  139. try{
  140. output.close();
  141. System.out.println("success");
  142. }catch(IOExceptione){
  143. System.out.println("fail");
  144. e.printStackTrace();
  145. }
  146. }
  147. }
  148. }
  149. }

更多相关文章

  1. android获取各路径下的文件流
  2. Android 代码执行Linux Shell小记
  3. android studio中xml文件代码提示问题
  4. Android MediaScanner源代码解析
  5. Android Studio多渠道批量打包及代码混淆
  6. Android下的应用编程——用HTTP协议实现文件上传功能
  7. Android 解压APK文件

随机推荐

  1. Android Studio 添加jniLib
  2. Android P新特性:强制执行 FLAG_ACTIVITY
  3. Android: 获得API level
  4. Android用Spinner做日期 年月日
  5. android 动画2
  6. 第四课-Log的使用
  7. 播放系统铃音 android
  8. Android登录界面开发及响应;页面跳转;传参
  9. Android 学习记录-调试输出
  10. Android touch event