Android 下载文件及写入SD卡

Android 下载文件及写入SD卡
2011年08月17日
    转至:http://zhoujingxian.iteye.com/blog/859597
    龙龙:可以直接借用的一批代码,很好很强大。
    Android 下载文件及写入SD卡,实例代码
    Main.xml代码
    
    
    
    
    
    
    
    
    
    
    Androidmanifest.xml代码
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    下载助手类httpdownloader 代码
    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.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;
    }
    }
    文件操作类fileutils 代码
    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);
    }
    output.flush();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    finally{
    try {
    output.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return file;
    }
    }
    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);
    }
    output.flush();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    finally{
    try {
    output.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return file;
    }
    }
    主程序类download 代码
    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{
    @Override
    public 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{
    @Override
    public 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);
    }
    }
    }
    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{
    @Override
    public 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{
    @Override
    public 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卡 记得加入的两个权限配置
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值