android下载文件,写入SD卡等

来源:互联网 发布:物业app软件排名 编辑:程序博客网 时间:2024/05/15 23:51

如何写代码使android从网上下载文件

1使用HTTP协议下载文件

下载文件可以使用很多的协议,比如常见的有HTTP协议,FTP协议等,这里主要介绍学习的HTTP协议

要想下载东西,如果用HTTP协议,必须先有一个HttpURLConnection 对象,在获取了这个对象之后,就可以调用它的getInputStream()方面,来获取一个输入流。对于文件操作,肯定躲不开输入流和输出流,输入流就是向程序当中读入数据,而输出流是想目标写出数据。如果使用这协议下载文件,肯定需要访问网络,而访问网络需要获得访问网络的权限

这里为android.permission.INTERNET,这个权限需要在AndroidManifest.xml里面声明

2根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件中的内容,步骤如下:

1创建一个URL对象  比如  url=new URL(utlStr);这里utlStr就是你要下载的文件的网址

2通过URL对象,创建一个HttpURLConnection 对象

3得到InputStream

InputStream当中读取数据

比如:

public String download(String urlStr) {

StringBuffer sb = new StringBuffer();

String line = null;

BufferedReader buffer = null;

try {

// 创建一个URL对象

url = new URL(urlStr);

// 创建一个Http连接

HttpURLConnection urlConn = (HttpURLConnection) url

.openConnection();

// 使用IO流读取数据

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 (Exception e) {

e.printStackTrace();

}

}

return sb.toString();

}

 

这只是把文件下载下来,那么如何写入Sdcard

要想写入Sdcard ,你就需要知道Sdcard的位置,对于不同的手机,可能Sdcard的名字不太一样,那么如果让我们的程序适应所以得设备呢,可以使用android提供的这个类,即Environment类,调用的getExternalStorageDirectory()方法,得到外部存储路径,即来得到当前设备的SD卡的目录

而且需要注意的是,要访问SD卡,需要在AndroidManifest.xml里面进行声明访问SD卡的权限,这样对SD卡才有写的权利,AndroidManifest.xml是Android应用程序中最重要的文件之一。它是Android程序的全局配置文件,该文件提供了Android系统所需要的关于该应用程序的必要信息

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="ly.download"

      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="4" />

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

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

</manifest> 

将下载的文件写入Sdcard

当然也可以把下载的文件存入手机主存储设备,但是手机主存储设备是有限的,而现在的Sdcard一方面价格比较便宜,另一方面空间也比较大,为了不让手机卡,尽量将下载的文件写入Sdcard比较好

实例比如:

package ly.utils;

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;

public String getSDPATH() {

return SDPATH;

}

public FileUtils() {

//得到当前外部存储设备的目录

// /SDCARD

SDPATH = Environment.getExternalStorageDirectory() + "/";

}

/**

 * SD卡上创建文件

 * 

 * @throws IOException

 */

public File creatSDFile(String fileName) throws IOException {

File file = new File(SDPATH + fileName);

file.createNewFile();

return file;

}

/**

 * SD卡上创建目录

 * 

 * @param dirName

 */

public File creatSDDir(String dirName) {

File dir = new File(SDPATH + dirName);

dir.mkdir();

return dir;

}

/**

 * 判断SD卡上的文件夹是否存在

 */

public boolean isFileExist(String fileName){

File file = new File(SDPATH + fileName);

return file.exists();

}

/**

 * 将一个InputStream里面的数据写入到SD卡中

 */

public File write2SDFromInput(String path,String fileName,InputStream input){

File file = null;

OutputStream output = null;

try{

creatSDDir(path);

file = creatSDFile(path + fileName);

output = new FileOutputStream(file);

byte buffer [] = new byte[4 * 1024];

while((input.read(buffer)) != -1){

output.write(buffer);

}

output.flush();

}

catch(Exception e){

e.printStackTrace();

}

finally{

try{

output.close();

}

catch(Exception e){

e.printStackTrace();

}

}

return file;

}

}