Android 下载文件及写入SD卡,实例代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><Button  android:id="@+id/downloadTxt"    android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="下载文本文件"    /><Button  android:id="@+id/downloadMp3"    android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="下载MP3文件"    /></LinearLayout>

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.learning.example"      android:versionCode="1"      android:versionName="1.0">    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".Download"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <uses-sdk android:minSdkVersion="8" /><!-- 访问网络和操作SD卡 加入的两个权限配置--><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></manifest> 

package com.learning.example.util;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class HttpDownloader {private URL url = null; /** * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容 * 1.创建一个URL对象 * 2.通过URL对象,创建一个HttpURLConnection对象 * 3.得到InputStream * 4.从InputStream当中读取数据 * @param urlStr * @return */public String download(String urlStr){StringBuffer sb = new StringBuffer();String line = null;BufferedReader buffer = null;try {url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));while( (line = buffer.readLine()) != null){sb.append(line);}} catch (Exception e) {e.printStackTrace();}finally{try {buffer.close();} catch (IOException e) {e.printStackTrace();}}return sb.toString();}/** *  * @param urlStr * @param path * @param fileName * @return  * -1:文件下载出错 *  0:文件下载成功 *  1:文件已经存在 */public int downFile(String urlStr, String path, String fileName){InputStream inputStream = null;try {FileUtils fileUtils = new FileUtils();if(fileUtils.isFileExist(path + fileName)){return 1;} else {inputStream = getInputStreamFromURL(urlStr);File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);if(resultFile == null){return -1;}}} catch (Exception e) {e.printStackTrace();return -1;}finally{try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}return 0;}/** * 根据URL得到输入流 * @param urlStr * @return */public InputStream getInputStreamFromURL(String urlStr) {HttpURLConnection urlConn = null;InputStream inputStream = null;try {url = new URL(urlStr);urlConn = (HttpURLConnection)url.openConnection();inputStream = urlConn.getInputStream();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return inputStream;}}

package com.learning.example.util;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.os.Environment;public class FileUtils {private String SDPATH;private int FILESIZE = 4 * 1024; public String getSDPATH(){return SDPATH;}public FileUtils(){//得到当前外部存储设备的目录( /SDCARD )SDPATH = Environment.getExternalStorageDirectory() + "/";}/** * 在SD卡上创建文件 * @param fileName * @return * @throws IOException */public File createSDFile(String fileName) throws IOException{File file = new File(SDPATH + fileName);file.createNewFile();return file;}/** * 在SD卡上创建目录 * @param dirName * @return */public File createSDDir(String dirName){File dir = new File(SDPATH + dirName);dir.mkdir();return dir;}/** * 判断SD卡上的文件夹是否存在 * @param fileName * @return */public boolean isFileExist(String fileName){File file = new File(SDPATH + fileName);return file.exists();}/** * 将一个InputStream里面的数据写入到SD卡中 * @param path * @param fileName * @param input * @return */public File write2SDFromInput(String path,String fileName,InputStream input){File file = null;OutputStream output = null;try {createSDDir(path);file = createSDFile(path + fileName);output = new FileOutputStream(file);                            byte[] buffer = new byte[FILESIZE];/*真机测试,这段可能有问题,请采用下面网友提供的                           while((input.read(buffer)) != -1){output.write(buffer);}                            */                           /* 网友提供 begin */                           int length;                           while((length=(input.read(buffer))) >0){                                 output.write(buffer,0,length);                           }                           /* 网友提供 end */output.flush();} catch (Exception e) {e.printStackTrace();}finally{try {output.close();} catch (IOException e) {e.printStackTrace();}}return file;}}

package com.learning.example;import com.learning.example.util.HttpDownloader;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Download extends Activity {private Button downlaodTxtButton ;private Button downlaodMP3Button ;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        downlaodTxtButton = (Button)findViewById(R.id.downloadTxt);        downlaodTxtButton.setOnClickListener(new DownloadTxtListener());                downlaodMP3Button = (Button)findViewById(R.id.downloadMp3);        downlaodMP3Button.setOnClickListener(new DownloadMP3Listener());    }        class DownloadTxtListener implements OnClickListener{@Overridepublic void onClick(View v) {HttpDownloader downloader = new HttpDownloader();String lrc = downloader.download("http://172.16.11.9:8080/test/1.lrc");System.out.println(lrc);}        }        class DownloadMP3Listener implements OnClickListener{@Overridepublic void onClick(View v) {HttpDownloader downloader = new HttpDownloader();int result = downloader.downFile("http://172.16.11.9:8080/test/1.mp3", "voa/", "1.map3");System.out.println(result);}        }}

Notice:访问网络和操作SD卡 记得加入的两个权限配置

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

更多相关文章

  1. 关于Android中xml布局文件
  2. android 几个常用命令
  3. 高焕堂android中文书全,电子文件for version 1.0
  4. Android编译过程详解
  5. android 入门xml布局文件
  6. Android(安卓)Studio目录结构
  7. android:layout_gravity 和 android:gravity 的区别
  8. Android:关于声明文件中android:process属性说明
  9. Android插件配置-Android(安卓)Extension介绍

随机推荐

  1. MySQL联表查询基本操作之left-join常见的
  2. MySQL8新特性之降序索引底层实现详解
  3. mysql8.0.20安装与连接navicat的方法及注
  4. MySQL 编码utf8 与 utf8mb4 utf8mb4_unic
  5. 源码编译安装MySQL8.0.20的详细教程
  6. CentOS7版本安装Mysql8.0.20版本数据库的
  7. window10下mysql 8.0.20 安装配置方法图
  8. MySql视图触发器存储过程详解
  9. mysql 8.0.20 安装配置详细教程
  10. Centos7下安装和配置MySQL5.7.20的详细教