`
shenjichao2009
  • 浏览: 96193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android中下载文件的使用

阅读更多

DownloadActivity.java

package com.duoguo.android;

import com.duoguo.util.DownloadUtil;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * 文件下载
 *
 * @author shyboy(
897948924@qq.com)
 *
 */

public class DownloadActivity extends Activity {

 // 声明Button控件
 private Button downloadTextFileButton;
 private Button downloadMP3FileButton;

 @Override
 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  // 获取Button控件
  downloadTextFileButton = (Button) findViewById(R.id.downLoadTextFileId);
  downloadMP3FileButton = (Button) findViewById(R.id.downLoadMP3FileId);

  // 为Button控件添加事件单击监听器
  downloadTextFileButton
    .setOnClickListener(new DownloadTextFileClickListener());
  downloadMP3FileButton
    .setOnClickListener(new DownloadMP3FileClickListener());

 }

 // 为downloadTextFileButton控件编写监听器
 class DownloadTextFileClickListener implements OnClickListener {

  @Override
  public void onClick(View v) {

   String textContent = DownloadUtil
     .download("
http://dldx.csdn.net/fd.php?i=232723316503113&s=62d4f87fc08bc83113919d484d8a5dbb");// 下载文本内容
   System.out.println("歌词内容为:" + textContent);

  }

 }

 // 为downloadMP3FileButton控件编写监听器
 class DownloadMP3FileClickListener implements OnClickListener {

  @Override
  public void onClick(View v) {

   String mp3Content = DownloadUtil
     .download(
       "
http://dldx.csdn.net/fd.php?i=232723316503113&s=62d4f87fc08bc83113919d484d8a5dbb",
       "/MP3/", "view.ppt", false);
   System.out.println("MP3:" + mp3Content);

  }

 }

}

 

DownloadUtil.java

/**
 *
 */
package com.duoguo.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;

import android.util.Log;

/**
 * 文件下载帮助类
 *
 * @author shyboy(
897948924@qq.com)
 *
 */
public class DownloadUtil {

 private static URL url;// 下载文件的地址

 /**
  * 下载文本文件
  *
  * @param urlStr
  *            :文件的下载链接地址
  * @return String:文本文件的内容
  */
 public static String download(String urlStr) {

  StringBuilder sb = new StringBuilder();
  String line = null;
  BufferedReader bufferedReader = null;

  try {

   url = new URL(urlStr);// 创建URL对象
   HttpURLConnection httpURLConnection = (HttpURLConnection) url
     .openConnection();// 获取HttpURLConnection连接对象

   bufferedReader = new BufferedReader(new InputStreamReader(
     httpURLConnection.getInputStream()));// 获取BufferedReader对象
   while ((line = bufferedReader.readLine()) != null) {
    sb.append(line);
   }

  } catch (MalformedURLException e) {

   e.printStackTrace();
   Log.d("debug", e.getMessage());

  } catch (IOException e) {

   e.printStackTrace();
   Log.d("debug", e.getMessage());

  } finally {
   try {

    bufferedReader.close();// 关闭流

   } catch (IOException e) {

    e.printStackTrace();
    Log.d("debug", e.getMessage());

   }
  }

  return sb.toString();

 }

 /**
  * 下载MP3文件
  *
  * @param urlStr
  *            :文件的下载链接地址
  * @param path
  *            :下载文件的存放路径
  * @param fileName
  *            :下载文件的名称
  * @param isReplace
  *            :是否替换已存在的文件
  * @return String:FAILURE/SUCCESS/EXIST
  */
 public static String download(String urlStr, String path, String fileName,
   boolean isReplace) {

  InputStream inputStream = null;
  File downloadFile = null;

  if (FileUtil.isFileExist(path + fileName))// 当文件存在时
  {

   if (isReplace)// 当替换文件时
   {
    inputStream = getInputStreamFromUrl(urlStr);// 根据URL获取相应的InputStream输入流对象
    downloadFile = FileUtil.writeToSDCardFromInput(path, fileName,
      inputStream);// 通过输入流向SDCard中写入文件

    if (null == downloadFile) {

     return DownloadEnum.FAILURE.toString();// 下载失败

    } else {

     return DownloadEnum.SUCCESS.toString();// 下载成功

    }
   } else {

    return DownloadEnum.EXIST.toString();// 文件已存在

   }

  } else {

   inputStream = getInputStreamFromUrl(urlStr);// 根据URL获取相应的InputStream输入流对象
   downloadFile = FileUtil.writeToSDCardFromInput(path, fileName,
     inputStream);// 通过输入流向SDCard中写入文件

   if (null == downloadFile) {

    return DownloadEnum.FAILURE.toString();// 下载失败

   } else {

    return DownloadEnum.SUCCESS.toString();// 下载成功

   }

  }

 }

 /**
  * 根据URL获取相应的InputStream输入流对象
  *
  * @param urlStr
  *            :文件的链接地址
  * @return InputStream
  */
 public static InputStream getInputStreamFromUrl(String urlStr) {

  InputStream inputStream = null;

  try {

   URL url = new URL(urlStr);
   HttpURLConnection httpURLConnection = (HttpURLConnection) url
     .openConnection();
   inputStream = httpURLConnection.getInputStream();

  } catch (MalformedURLException e) {

   e.printStackTrace();
   Log.e("debug", e.getMessage());

  } catch (IOException e) {

   e.printStackTrace();
   Log.e("debug", e.getMessage());

  }

  return inputStream;

 }

}

FileUtil.java

/**
 *
 */
package com.duoguo.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.os.Environment;
import android.util.Log;

/**
 * 文件操作类
 *
 * @author shyboy(
897948924@qq.com)
 *
 */
public class FileUtil {

 private static String SDPATH = Environment.getExternalStorageDirectory()
   + "/";// SDCard的目录名称

 public FileUtil() {

  SDPATH = Environment.getExternalStorageDirectory() + "/";// 获取当前外部存储设备的目录
  System.out.println("SDCard:" + SDPATH);

 }

 /**
  * 创建SDCard文件
  *
  * @param fileName
  *            :文件名称
  * @return File:文件对象
  */
 public static File createSDCardFile(String fileName) {

  File file = null;

  if ((null != SDPATH && !"".equals(SDPATH))
    && (null != fileName && !"".equals(fileName))) {

   file = new File(SDPATH + fileName);// 生成文件对象
   if (null != file && !file.exists()) {
    try {

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

    } catch (IOException e) {

     e.printStackTrace();
     Log.d("debug", e.getMessage());

    }
   }

  }

  return file;

 }

 /**
  * 创建SDCard目录
  *
  * @param dirName
  *            :文件目录
  * @return File:文件对象
  */
 public static File createSDCardDir(String dirName) {

  File dir = null;

  dir = new File(SDPATH + dirName);// 生成文件目录对象
  if (null != dir && !dir.exists()) {
   dir.mkdirs();// 创建文件目录
  }

  return dir;

 }

 /**
  * 判断文件是否存在
  *
  * @param fileName
  *            :文件名称
  * @return boolean:true/false
  */
 public static boolean isFileExist(String fileName) {

  if ((null != SDPATH && !"".equals(SDPATH))
    && (null != fileName && !"".equals(fileName))) {

   File file = new File(SDPATH + fileName);

   if (null != file) {
    if (file.exists()) {
     return true;
    } else {
     return false;
    }
   }

  }

  return false;

 }

 /**
  * 通过输入流向SDCard中写入文件
  *
  * @param path
  *            :文件存放在SDCard上的路径
  * @param fileName
  *            :文件名称
  * @param inputStream
  *            :输入流对象
  * @return File:文件对象
  */
 public static File writeToSDCardFromInput(String path, String fileName,
   InputStream inputStream) {

  File file = null;
  OutputStream outputStream = null;

  if (null != path && !"".equals(path)) {

   createSDCardDir(path);// 创建文件目录

   if (null != fileName && !"".equals(fileName)) {

    file = createSDCardFile(path + fileName);// 创建文件
    if (null != file) {

     try {

      outputStream = new FileOutputStream(file);// 创建OutputStream输出流对象
      byte[] buffer = new byte[4 * 1024];

      while ((inputStream.read(buffer)) != -1)// 将写入的内容写到字节数组中
      {
       try {

        outputStream.write(buffer);// 将字节数组中读取的内容写入到输出流中

       } catch (IOException e) {
        e.printStackTrace();
       }
      }

      outputStream.flush();// 清理输出流通道

     } catch (FileNotFoundException e) {

      e.printStackTrace();
      Log.e("debug", e.getMessage());

     } catch (IOException e) {

      e.printStackTrace();
      Log.e("debug", e.getMessage());

     } finally {

      try {

       inputStream.close();// 关闭输入流(用来读取数据)
       outputStream.close();// 关闭输出流(用来写入数据)

      } catch (IOException e) {

       e.printStackTrace();
       Log.e("debug", e.getMessage());

      }

     }

    }

   }

  }

  return file;

 }

 /**
  * 获取SDCard的目录名称
  *
  * @return String
  */
 public String getSDPATH() {
  return SDPATH;
 }

 /**
  * 设置SDCard的目录名称
  *
  * @param sDPATH
  *            :SDCard的路径
  */
 public void setSDPATH(String sDPATH) {
  SDPATH = sDPATH;
 }

}

main.xml

<?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/downLoadTextFileId"
  android:layout_width="fill_parent" android:layout_height="wrap_content"
  android:text="@string/downLoadTextFile" android:layout_margin="10px"
  android:layout_gravity="center" android:gravity="center" />

 <Button android:id="@+id/downLoadMP3FileId"
  android:layout_width="fill_parent" android:layout_height="wrap_content"
  android:text="@string/downLoadMP3File" android:layout_margin="10px"
  android:layout_gravity="center" android:gravity="center" />

</LinearLayout>

 

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string name="app_name">Download</string>
 <string name="downLoadTextFile">下载文本文件</string>
 <string name="downLoadMP3File">下载MP3文件</string>
</resources>

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="
http://schemas.android.com/apk/res/android"
 package="com.duoguo.android" android:versionCode="1"
 android:versionName="1.0">
 <uses-sdk android:minSdkVersion="8" />

 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name=".DownloadActivity" 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-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

</manifest>

分享到:
评论
2 楼 shenjichao2009 2011-11-30  
anyang763 写道
谢啦,刚好用到

客气了
1 楼 anyang763 2011-11-30  
谢啦,刚好用到

相关推荐

    android下载word文档并打开

    在Android平台上,开发一个应用程序以实现下载Word文档并顺利打开是一项常见的需求。下面将详细讲解这一过程中的关键知识点,以及如何结合给定的资源进行操作。 1. **Android权限管理**: 在Android中,访问网络和...

    Android利用Http下载文件

    本文将深入探讨如何在Android中实现这个功能,主要围绕标题“Android利用Http下载文件”和提供的博客链接进行讲解。 首先,我们需要理解Http协议的基本原理。Http(超文本传输协议)是一种应用层协议,用于从Web...

    Android使用ftp方式实现文件上传和下载

    * 文件管理应用中,需要从 FTP 服务器下载文件到 Android 设备中。 三、Android 中使用 FTP 的实现方式 在 Android 中,使用 FTP 协议可以通过使用第三方库来实现,例如 ftp4j-1.7.2.jar。使用 ftp4j 库可以简化 ...

    android中文帮助文档

    `codepub.com下载说明.txt`可能是提供下载该文档的网站提供的额外说明,例如下载和解压过程中的注意事项,或者网站的使用条款等。 总的来说,这份Android中文帮助文档是开发者学习Android平台开发的宝贵资源,无论...

    android使用socket上传、下载文件

    本篇将详细讲解如何在Android应用中使用Socket进行文件的上传和下载操作。 首先,理解Socket的基本概念:Socket是应用程序与网络协议之间的接口,它允许两个网络应用程序通过TCP/IP协议进行通信。在Android中,我们...

    Android API中文帮助文档合集

    Android API中文帮助文档合集是为Android开发者提供的一份详尽的参考资料,旨在助力开发者更好地理解和使用Android平台的各种功能和接口。这份文档包含了从基础到高级的各类Android开发知识点,覆盖了系统架构、UI...

    Android 2.2 API中文文档合集

    开发者可以在此文档中了解如何创建、启动和管理Activity,以及如何处理生命周期事件。 2. **Intent**: Intent是Android中用于通信的一种机制,可以用来启动新的Activity或者服务,传递数据。理解Intent的工作原理对...

    Android文件下载(实现断点续传)

    本篇文章将详细探讨如何在Android中实现这一功能,主要使用Java的RandomAccessFile类以及多线程技术。 首先,理解断点续传的基本原理。它主要依赖于服务器端支持和客户端保存已下载部分的信息。当下载开始时,...

    Android 多文件下载进度条

    3. **进度条显示**:Android UI更新必须在主线程中进行,因此,我们需要在下载文件的后台线程中定期(例如每1%的下载进度)更新一个`ProgressBar`。使用`Handler`或者`runOnUiThread`方法可以在后台线程与主线程之间...

    Android API中文文档

    Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android Android API 中文文档 中文文档Android API ...

    android 下载网络文件

    例如,使用`HttpURLConnection`下载文件的基本步骤如下: - 建立连接:`HttpURLConnection connection = (HttpURLConnection) url.openConnection();` - 设置请求方法:`connection.setRequestMethod("GET");` - ...

    Android 下载文件Demo

    2. Android下载文件过程: - 建立网络连接:使用HttpURLConnection或第三方库如OkHttp建立到服务器的连接,设置请求方法(通常是GET或POST)及必要的请求头(如Content-Type,Authorization等)。 - 获取输入流:...

    Android中文帮助文档

    Android使用XML布局文件定义界面元素,如TextView、EditText、Button等。通过约束布局(ConstraintLayout)或相对布局(RelativeLayout)等布局管理器组织元素,实现响应式设计。Material Design提供了统一的设计...

    Android TCP文件下载

    本文将详细讲解如何实现一个Android应用,利用TCP协议从PC服务器下载文件到Android设备。 首先,理解TCP(Transmission Control Protocol)是网络传输层的一个协议,提供了面向连接的、可靠的数据传输服务。在...

    android通过Service进行文件下载,后台下载

    本教程将深入探讨如何利用Service组件在Android设备上实现文件的后台下载,确保即使用户退出应用程序,文件下载也能继续进行。 ### 1. Android Service基础知识 Service是Android四大组件之一,它在后台运行,没有...

    Android SDK 中文帮助文档

    Android SDK(Software Development Kit)是开发Android应用的基础工具集,它包含了编写、调试和构建...文档中的“AndroidBox0.5”可能是一个特定版本的文档集合,包含了该版本SDK的全部内容,供开发者下载参考。

    android中poi生成word文档和excel文档

    开发者需要实例化`Document`对象,创建`Paragraph`,然后添加到文档中。如果XML数据需要转换为Word文档,可能需要解析XML并映射到Word文档的各个元素。 6. **生成Excel文档**:XSSF API允许开发者创建新的Excel工作...

    Android入门中文文档

    下载并安装Android Studio后,根据文档中的指导,你可以配置你的开发环境,包括选择合适的SDK版本,设置AVD(Android Virtual Device)来模拟真实设备进行测试。 接下来,文档会引导你创建第一个Android项目。这...

    android下载文件进度条时时更新

    这个项目“android下载文件进度条时时更新”是针对初学者设计的,旨在教授如何在Android应用中创建一个简单的文件下载功能,并实时显示下载进度。下面将详细介绍实现这一功能所涉及的关键知识点。 1. **Android权限...

Global site tag (gtag.js) - Google Analytics