android之download

有三个java类

Download.java

View Code
 1 package tk.download;
 2 
 3 
 4 import tk.utils.HttpDownloader;
 5 import android.os.Bundle;
 6 import android.R.integer;
 7 import android.app.Activity;
 8 import android.view.Menu;
 9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.widget.Button;
12 
13 public class Download extends Activity {
14     
15     /**
16      *创建一个HttpURLConnection对象
17      *HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();
18      *获得一个InputStream对象
19      *urlConn.getInputStream()
20      *访问网络的权限(在mainfest中声明)
21      *android.permission.INTERNET 
22      * 
23      *访问SDCARD
24      *得到当前设备SD卡的目录
25      *Environment.getExternalStorageDirectory()
26      *访问SD卡的权限
27      *android.permission.WRITE_EXTERNAL_STORAGE
28      * 
29      * /
30     /**Called when the activity is first created.*/
31     
32     private Button downloadTxtButton;
33     private Button downloadMp3Button;
34 
35     
36     @Override
37     public void onCreate(Bundle savedInstanceState) {
38         super.onCreate(savedInstanceState);
39         setContentView(R.layout.main);
40         downloadMp3Button=(Button)findViewById(R.id.downloadMp3);
41         downloadMp3Button.setOnClickListener(new DownloadMp3Listener());
42         downloadTxtButton=(Button)findViewById(R.id.downloadTxt);
43         downloadTxtButton.setOnClickListener(new DownloadTxtListener());
44         
45         
46     }
47     
48     class DownloadTxtListener implements OnClickListener{
49 
50         @Override
51         public void onClick(View v) {
52             HttpDownloader httpDownloader=new HttpDownloader();
53             System.out.println("begin");
54             String lrc = httpDownloader.download("http://125.222.201.90/home/download4.asp?FileName=hello.txt");
55             System.out.println(lrc);
56             System.out.println("end");
57             
58             
59         }
60         
61         
62     }
63     
64     class DownloadMp3Listener implements OnClickListener{
65 
66         @Override
67         public void onClick(View v) {
68             HttpDownloader httpDownloader=new HttpDownloader();
69             System.out.println("begin");
70             int result = httpDownloader.downFile("http://125.222.201.90/home/download4.asp?FileName=Layout_04.apk", "tk/", "test.apk");
71             System.out.println(result);
72             
73         }
74 
75     }
76     
77     
78 
79     @Override
80     public boolean onCreateOptionsMenu(Menu menu) {
81         getMenuInflater().inflate(R.menu.main, menu);
82         return true;
83     }
84 }

FileUtils.java

View Code
 1 package tk.utils;
 2 
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 
 9 import android.os.Environment;
10 
11 public class FileUtils {
12     
13     private String SDPATH;
14     
15     public String getSDPATH() {
16         return SDPATH;
17     }
18 
19     public FileUtils() {
20         //得到当前外部存储设备的目录  /SDCARD
21         SDPATH = Environment.getExternalStorageDirectory() + "/";
22         //SDPATH ="/";
23     }
24 
25 /**
26 * 在SD卡上创建目录
27 * 
28 * @param dirName
29 */
30 
31     public File creatSDDir(String dirName) {
32         File file = new File(SDPATH + dirName);
33         file.mkdirs();
34         return file;
35     }
36 
37 /**
38 * 在SD卡上创建文件
39 * 
40 * @throws IOException
41 */
42 
43     public File creatSDFile(String fileName) throws IOException {
44         File file = new File(SDPATH + fileName);
45         file.createNewFile();
46         return file;
47     }
48 
49  
50 
51 /**
52 * 判断SD卡上的文件夹是否存在
53 */
54 
55     public boolean isFileExist(String fileName){
56         File file = new File(SDPATH + fileName);
57         return file.exists();
58     }
59 
60 /**
61 * 将一个InputStream里面的数据写入到SD卡中
62 */
63 
64     public File write2SDFromInput(String path,String fileName,InputStream inputStream){
65     
66         File file = null;
67         OutputStream outputStream = null;
68         
69         try{
70             creatSDDir(path);
71             file = creatSDFile(path + fileName);
72             outputStream = new FileOutputStream(file);
73             byte buffer [] = new byte[4 * 1024];
74             while((inputStream.read(buffer)) != -1){
75                 
76                 outputStream.write(buffer);
77                 
78             }
79             outputStream.flush();
80             
81         }catch(Exception e){
82             
83             e.printStackTrace();
84             
85         }finally{
86             
87             try{
88                 outputStream.close();
89             }catch(Exception e){
90                 e.printStackTrace();
91             }
92             
93         }
94         
95         return file;
96     
97     }
98 
99 }

HttpDownloader.java

View Code
  1 package tk.utils;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.File;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.InputStreamReader;
  8 import java.net.HttpURLConnection;
  9 import java.net.MalformedURLException;
 10 import java.net.URL;
 11 
 12 public class HttpDownloader {
 13 
 14     private URL url = null;
 15     
 16     /**
 17      * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
 18      * 1.创建一个URL对象
 19      * 2.通过URL对象,创建一个HttpURLConnection对象
 20      * 3.得到Inputstream
 21      * 4.从InputStream当中读取数据
 22      * @param urlStr
 23      * @return
 24      */
 25     public String download(String urlStr){
 26         StringBuffer sb = new StringBuffer();
 27         String line = null;
 28         
 29         BufferedReader buffer = null;
 30         
 31         try{
 32             //创建一个Http对象
 33             url = new URL(urlStr);
 34             //创建一个Http连接
 35             HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
 36             //使用IO流读取数据
 37             buffer = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
 38             
 39             while((line = buffer.readLine())!=null){
 40                 sb.append(line);
 41             }
 42         }catch(Exception e){
 43             e.printStackTrace();            
 44         }finally{
 45             try{
 46                 buffer.close();
 47             }catch(Exception e){
 48                 e.printStackTrace();
 49             }
 50         }
 51         
 52         return sb.toString();
 53     }
 54     /**
 55      *该函数返回整形-1;代表下载文件出错,0代表下载文件成功,1 代表文件已存在
 56      */
 57     public int downFile(String urlStr, String path, String fileName) {
 58     
 59         InputStream inputStream = null;
 60         
 61         try {
 62             FileUtils fileUtils = new FileUtils(); 
 63             if (fileUtils.isFileExist(path + fileName)) {
 64                 return 1; //文件已经存在
 65             } else {
 66                 inputStream =getInputStreamFromUrl(urlStr);
 67                 if(inputStream==null)return 2;
 68                 File resultFile =fileUtils.write2SDFromInput(path,fileName,inputStream);  
 69                 if (resultFile == null){
 70                     return -1;  //下载文件出错
 71                 }
 72             }
 73         } catch (Exception e) {
 74             e.printStackTrace();
 75             return -1;
 76         } finally {
 77             try {
 78                 inputStream.close();
 79             } catch (Exception e) {
 80                 e.printStackTrace();
 81             }
 82         }
 83     return 0;
 84     }
 85     
 86      
 87     
 88     public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException, IOException {
 89     
 90         InputStream inputStream=null;
 91         
 92         try{
 93             // 创建一个URL对象
 94            url = new URL(urlStr);
 95            // 创建一个Http连接
 96            HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
 97            // 使用IO流读取数据
 98            inputStream = urlConn.getInputStream();
 99            return inputStream;
100         }catch (Exception e) {
101             e.printStackTrace();
102             return null;
103         }finally {
104            inputStream.close();
105         }
106     }
107 
108 }

androidmainfest.xml

View Code

main.xml

View Code
 1 <?xml version= "1.0" encoding ="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation= "vertical"
 4     android:layout_width= "fill_parent"
 5     android:layout_height= "fill_parent"
 6     >
 7     
 8     <Button 
 9         android:id="@+id/downloadTxt"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:text="downloadtxt"
13         />
14     
15      <Button 
16         android:id="@+id/downloadMp3"
17         android:layout_width="fill_parent"
18         android:layout_height="wrap_content"
19         android:text="downloadMP3"
20         />
21 </LinearLayout>
原文地址:https://www.cnblogs.com/tiankonguse/p/2649610.html