zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    在eclipse外边打开浏览器
    双开Eclipse
    6.5版本的CentOSLinux
    Intel x86_64 Architecture Background 3
    Java 大数、高精度模板
    Intel x86_64 Architecture Background 2
    Intel x86_64 Architecture Background 1
    Codeforces 999D Equalize the Remainders (set使用)
    Codeforces 996E Leaving the Bar (随机化)
    欧拉函数(小于或等于n的数中与n互质的数的数目)&& 欧拉函数线性筛法
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/4581960.html
Copyright © 2011-2022 走看看