- 浏览: 96333 次
- 性别:
- 来自: 上海
最新评论
-
shenjichao2009:
<div class="quote_title ...
Android中下载文件的使用 -
anyang763:
谢啦,刚好用到
Android中下载文件的使用 -
上帝卖糕的:
话说你和我当年上大学的时候,是多么的相似啊!
拿什么拯救我自己? -
yuantong:
那什么拯救你自己?你做好了拯救的准备了吗?
拿什么拯救我自己?
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>
- Download.zip (59.4 KB)
- 下载次数: 13
发表评论
-
Android Service基本知识
2014-02-20 14:21 832概念: Service是应用组件(运行在宿主进程的主线程 ... -
Android中对XML文件的解析
2011-12-07 21:46 1265ContentHandler.java:负责对XML进行处理 ... -
Android中SQLite的使用
2011-11-22 22:26 2638Android中SQLite的使用 <1>创建数 ... -
Android中Intent和ProgressBar的结合使用
2011-11-19 18:20 1492strings.xml <?xml version=& ... -
Android中Intent的使用
2011-11-19 17:35 1099strings.xml <?xml version=& ... -
Android中ListView的使用
2011-11-19 11:31 3328user.xml <?xml version=&quo ... -
RadioButton、CheckBox和Toast的使用
2011-11-16 23:22 1224package com.duoguo.android; im ... -
Android中intent的使用
2011-10-07 16:57 885package com.duoguo.android; im ... -
Android中ContextMenu的使用
2011-08-24 22:58 2903package com.baosight.menu; ... -
Android中OptionMenu的使用
2011-08-24 22:26 920package com.baosight.menu; ... -
Android中AlertDiaolg的使用
2011-08-22 23:17 1252string.xml文件 <?xml versi ...
相关推荐
在Android平台上,开发一个应用程序以实现下载Word文档并顺利打开是一项常见的需求。下面将详细讲解这一过程中的关键知识点,以及如何结合给定的资源进行操作。 1. **Android权限管理**: 在Android中,访问网络和...
本文将深入探讨如何在Android中实现这个功能,主要围绕标题“Android利用Http下载文件”和提供的博客链接进行讲解。 首先,我们需要理解Http协议的基本原理。Http(超文本传输协议)是一种应用层协议,用于从Web...
* 文件管理应用中,需要从 FTP 服务器下载文件到 Android 设备中。 三、Android 中使用 FTP 的实现方式 在 Android 中,使用 FTP 协议可以通过使用第三方库来实现,例如 ftp4j-1.7.2.jar。使用 ftp4j 库可以简化 ...
`codepub.com下载说明.txt`可能是提供下载该文档的网站提供的额外说明,例如下载和解压过程中的注意事项,或者网站的使用条款等。 总的来说,这份Android中文帮助文档是开发者学习Android平台开发的宝贵资源,无论...
Android API中文帮助文档合集是为Android开发者提供的一份详尽的参考资料,旨在助力开发者更好地理解和使用Android平台的各种功能和接口。这份文档包含了从基础到高级的各类Android开发知识点,覆盖了系统架构、UI...
本篇将详细讲解如何在Android应用中使用Socket进行文件的上传和下载操作。 首先,理解Socket的基本概念:Socket是应用程序与网络协议之间的接口,它允许两个网络应用程序通过TCP/IP协议进行通信。在Android中,我们...
开发者可以在此文档中了解如何创建、启动和管理Activity,以及如何处理生命周期事件。 2. **Intent**: Intent是Android中用于通信的一种机制,可以用来启动新的Activity或者服务,传递数据。理解Intent的工作原理对...
本篇文章将详细探讨如何在Android中实现这一功能,主要使用Java的RandomAccessFile类以及多线程技术。 首先,理解断点续传的基本原理。它主要依赖于服务器端支持和客户端保存已下载部分的信息。当下载开始时,...
3. **进度条显示**:Android UI更新必须在主线程中进行,因此,我们需要在下载文件的后台线程中定期(例如每1%的下载进度)更新一个`ProgressBar`。使用`Handler`或者`runOnUiThread`方法可以在后台线程与主线程之间...
Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android Android API 中文文档 中文文档Android API ...
例如,使用`HttpURLConnection`下载文件的基本步骤如下: - 建立连接:`HttpURLConnection connection = (HttpURLConnection) url.openConnection();` - 设置请求方法:`connection.setRequestMethod("GET");` - ...
2. Android下载文件过程: - 建立网络连接:使用HttpURLConnection或第三方库如OkHttp建立到服务器的连接,设置请求方法(通常是GET或POST)及必要的请求头(如Content-Type,Authorization等)。 - 获取输入流:...
Android使用XML布局文件定义界面元素,如TextView、EditText、Button等。通过约束布局(ConstraintLayout)或相对布局(RelativeLayout)等布局管理器组织元素,实现响应式设计。Material Design提供了统一的设计...
本文将详细讲解如何实现一个Android应用,利用TCP协议从PC服务器下载文件到Android设备。 首先,理解TCP(Transmission Control Protocol)是网络传输层的一个协议,提供了面向连接的、可靠的数据传输服务。在...
本教程将深入探讨如何利用Service组件在Android设备上实现文件的后台下载,确保即使用户退出应用程序,文件下载也能继续进行。 ### 1. Android Service基础知识 Service是Android四大组件之一,它在后台运行,没有...
Android SDK(Software Development Kit)是开发Android应用的基础工具集,它包含了编写、调试和构建...文档中的“AndroidBox0.5”可能是一个特定版本的文档集合,包含了该版本SDK的全部内容,供开发者下载参考。
开发者需要实例化`Document`对象,创建`Paragraph`,然后添加到文档中。如果XML数据需要转换为Word文档,可能需要解析XML并映射到Word文档的各个元素。 6. **生成Excel文档**:XSSF API允许开发者创建新的Excel工作...
下载并安装Android Studio后,根据文档中的指导,你可以配置你的开发环境,包括选择合适的SDK版本,设置AVD(Android Virtual Device)来模拟真实设备进行测试。 接下来,文档会引导你创建第一个Android项目。这...
这个文档主要面向使用Java语言进行开发的程序员,包含了Android系统的核心特性、组件、库以及开发环境的详细信息。 一、Android系统核心特性 1. **应用程序框架**:Android支持组件的重用和替换,允许开发者自由地...