一、代码
1.xml
(1)main.xml
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 <Button 8 android:id="@+id/downloadTxt" 9 android:layout_width="fill_parent" 10 android:layout_height="wrap_content" 11 android:text="下载文本文件" 12 /> 13 <Button 14 android:id="@+id/downloadMp3" 15 android:layout_width="fill_parent" 16 android:layout_height="wrap_content" 17 android:text="下载MP3文件 " 18 /> 19 </LinearLayout>
(2)AndroidManifest.xml.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.s01_original_e18_download" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="21" /> 10 11 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 android:name=".Download" 18 android:label="@string/app_name" > 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN" /> 21 22 <category android:name="android.intent.category.LAUNCHER" /> 23 </intent-filter> 24 </activity> 25 </application> 26 <uses-permission android:name="android.permission.INTERNET"/> 27 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 28 </manifest>
2.java
(1)Download.java
1 package com.example.s01_original_e18_download; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.View; 6 import android.view.View.OnClickListener; 7 import android.widget.Button; 8 9 public class Download extends Activity { 10 /** Called when the activity is first created. */ 11 private Button downloadTxtButton; 12 private Button downloadMp3Button; 13 @Override 14 public void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.main); 17 downloadTxtButton = (Button)findViewById(R.id.downloadTxt); 18 downloadTxtButton.setOnClickListener(new DownloadTxtListener()); 19 downloadMp3Button = (Button)findViewById(R.id.downloadMp3); 20 downloadMp3Button.setOnClickListener(new DownloadMp3Listener()); 21 } 22 23 class DownloadTxtListener implements OnClickListener{ 24 25 @Override 26 public void onClick(View v) { 27 HttpDownloader httpDownloader = new HttpDownloader(); 28 //String lrc = httpDownloader.download("http://192.168.1.104:8080/goods/LoseYourself.lrc"); 29 String lrc = httpDownloader.download("http://www.runoob.com/sqlite/sqlite-intro.html"); 30 System.out.println(lrc); 31 } 32 33 } 34 class DownloadMp3Listener implements OnClickListener{ 35 36 @Override 37 public void onClick(View v) { 38 // TODO Auto-generated method stub 39 HttpDownloader httpDownloader = new HttpDownloader(); 40 int result = httpDownloader.downFile("http://192.168.1.104:8080/goods/LoseYourself.mp3", "voa/", "a1.mp3"); 41 System.out.println(result); 42 } 43 44 } 45 46 }
(2)HttpDownloader.java
1 package com.example.s01_original_e18_download; 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 13 public class HttpDownloader { 14 private URL url = null; 15 16 /** 17 * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容 18 * 1.创建一个URL对象 19 * 2.通过URL对象,创建一个HttpURLConnection对象 20 * 3.得到InputStram 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 BufferedReader buffer = null; 29 try { 30 // 创建一个URL对象 31 url = new URL(urlStr); 32 // 创建一个Http连接 33 HttpURLConnection urlConn = (HttpURLConnection) url 34 .openConnection(); 35 // 使用IO流读取数据 36 buffer = new BufferedReader(new InputStreamReader(urlConn 37 .getInputStream())); 38 while ((line = buffer.readLine()) != null) { 39 sb.append(line); 40 } 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } finally { 44 try { 45 buffer.close(); 46 } catch (Exception e) { 47 e.printStackTrace(); 48 } 49 } 50 return sb.toString(); 51 } 52 53 /** 54 * 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在 55 */ 56 public int downFile(String urlStr, String path, String fileName) { 57 InputStream inputStream = null; 58 try { 59 FileUtils fileUtils = new FileUtils(); 60 61 if (fileUtils.isFileExist(path + fileName)) { 62 return 1; 63 } else { 64 inputStream = getInputStreamFromUrl(urlStr); 65 File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream); 66 if (resultFile == null) { 67 return -1; 68 } 69 } 70 } catch (Exception e) { 71 e.printStackTrace(); 72 return -1; 73 } finally { 74 try { 75 inputStream.close(); 76 } catch (Exception e) { 77 e.printStackTrace(); 78 } 79 } 80 return 0; 81 } 82 83 /** 84 * 根据URL得到输入流 85 * 86 * @param urlStr 87 * @return 88 * @throws MalformedURLException 89 * @throws IOException 90 */ 91 public InputStream getInputStreamFromUrl(String urlStr) 92 throws MalformedURLException, IOException { 93 url = new URL(urlStr); 94 HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 95 InputStream inputStream = urlConn.getInputStream(); 96 return inputStream; 97 } 98 }
(3)FileUtils.java
1 package com.example.s01_original_e18_download; 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 private String SDPATH; 13 14 public String getSDPATH() { 15 return SDPATH; 16 } 17 public FileUtils() { 18 //得到当前外部存储设备的目录 19 // /SDCARD 20 SDPATH = Environment.getExternalStorageDirectory() + "/"; 21 } 22 /** 23 * 在SD卡上创建文件 24 * 25 * @throws IOException 26 */ 27 public File creatSDFile(String fileName) throws IOException { 28 File file = new File(SDPATH + fileName); 29 file.createNewFile(); 30 return file; 31 } 32 33 /** 34 * 在SD卡上创建目录 35 * 36 * @param dirName 37 */ 38 public File creatSDDir(String dirName) { 39 File dir = new File(SDPATH + dirName); 40 dir.mkdirs(); 41 return dir; 42 } 43 44 /** 45 * 判断SD卡上的文件夹是否存在 46 */ 47 public boolean isFileExist(String fileName){ 48 File file = new File(SDPATH + fileName); 49 return file.exists(); 50 } 51 52 /** 53 * 将一个InputStream里面的数据写入到SD卡中 54 */ 55 public File write2SDFromInput(String path,String fileName,InputStream input){ 56 File file = null; 57 OutputStream output = null; 58 try{ 59 creatSDDir(path); 60 file = creatSDFile(path + fileName); 61 output = new FileOutputStream(file); 62 byte buffer [] = new byte[4 * 1024]; 63 while((input.read(buffer)) != -1){ 64 output.write(buffer); 65 } 66 output.flush(); 67 } 68 catch(Exception e){ 69 e.printStackTrace(); 70 } 71 finally{ 72 try{ 73 output.close(); 74 } 75 catch(Exception e){ 76 e.printStackTrace(); 77 } 78 } 79 return file; 80 } 81 82 }