Android学习笔记——download

该工程的功能是实现从网上的链接下载一个lrc文件和一个mp3文件

 

以下代码是MainActivity.java中的代码

package com.example.download;





import com.example.utils.HttpDownloader;



import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;



public class MainActivity extends Activity {

    /** Called when the activity is first created. */

    private Button downloadTxtButton;

    private Button downloadMp3Button;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        downloadTxtButton = (Button)findViewById(R.id.downloadTxt);

        downloadTxtButton.setOnClickListener(new DownloadTxtListener());

        downloadMp3Button = (Button)findViewById(R.id.downloadMp3);

        downloadMp3Button.setOnClickListener(new DownloadMp3Listener());

    }

    

    class DownloadTxtListener implements OnClickListener{

        public void onClick(View v) {

        HttpDownloader httpDownloader = new HttpDownloader();

        int lrc = httpDownloader.downFile("http://play.baidu.com/data2/lrc/121017633/121017633.lrc", "voa/", "1201250291414036861128.lrc");

        System.out.println(lrc);

        } 

    }

    

    class DownloadMp3Listener implements OnClickListener{

        public void onClick(View v) {

        // TODO Auto-generated method stub

        HttpDownloader httpDownloader = new HttpDownloader();

        int result = httpDownloader.downFile("http://cdn.y.baidu.com/yinyueren/532bfdb43a336a584533ff61a7289503.mp3", "voa/", "江南.mp3");

        System.out.println(result);

        }

    }

    

}

 

以下代码是FileUtils.java中的代码

package com.example.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.mkdirs();

        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];

            int len=-1;

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

                //在这里使用另一个重载,防止流写入的问题.

                output.write(buffer,0,len);

            }

            output.flush();

        }

        catch(Exception e){

            e.printStackTrace();

        }

        finally{

                try{

                    output.close();

                }    

                catch(Exception e){

                    e.printStackTrace();

                }

        }

        return file;

    }

}

 

以下代码是HttpDownloader.java中的代码

package com.example.utils;



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.得到InputStram

     * 4.从InputStream当中读取数据

     * @param urlStr

     * @return

     */

    

    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();

    }

 

    /**

     * 该函数返回整形 -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 (Exception e) {

                e.printStackTrace();

            }

        }

        return 0;

    }

 

    /**

     * 根据URL得到输入流

     * 

     * @param urlStr

     * @return

     * @throws MalformedURLException

     * @throws IOException

     */

    public InputStream getInputStreamFromUrl(String urlStr)

        throws MalformedURLException, IOException {

        url = new URL(urlStr);

        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

        InputStream inputStream = urlConn.getInputStream();

        return inputStream;

    }

}

 

以下代码是activity_main.xml中的代码

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

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical"

    tools:context="${relativePackage}.${activityClass}" >



    <TextView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />

    

    <Button

        android:id="@+id/downloadTxt"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="downloadTxt"

        />

    

    <Button

        android:id="@+id/downloadMp3"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="downloadMp3"

        />



</LinearLayout>

 

以下代码是AndroidManifest.xml中的代码

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

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

    package="com.example.download"

    android:versionCode="1"

    android:versionName="1.0" >



    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="21" />



    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MainActivity"

            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>

 

你可能感兴趣的:(Android学习)