Download.java中放入的是程式的主體,util包中放入的是一些公用的方法,其中FileUtils.java放入的是對檔案的一些基本操作,HttpDownloader.java中是對下載的一些基本操作。
第一步:先來看看主程式部分
package mars.download;import mars.util.HttpDownloader;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Download extends Activity implements OnClickListener{/** Called when the activity is first created. */private Button downloadTxtButton;private Button downloadMp3Button;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);findView();}public void findView(){downloadTxtButton = (Button) findViewById(R.id.downloadTxt);downloadTxtButton.setOnClickListener(this);downloadMp3Button = (Button) findViewById(R.id.downloadMp3);downloadMp3Button.setOnClickListener(this);}@Overridepublic void onClick(View v){// TODO Auto-generated method stubint viewId = v.getId();switch (viewId){/** * 這個方法只可以下載文字檔,它是逐行讀取字元竄的。 */case R.id.downloadTxt:{HttpDownloader httpDownloader = new HttpDownloader();String lrc = httpDownloader.downStr("http://61.184.100.229/");//這個地方的url可以自己定義Log.e("@@@@", "downloadTxt: " + lrc);}/** * 這個方法可以下載任何檔案。 */case R.id.downloadMp3:{HttpDownloader httpDownloader = new HttpDownloader();int result = httpDownloader.downFile("http://192.168.1.107:8080/voa1500/a1.mp3", "voa/","a1.mp3");//這個地方的url同樣可以自己定義Log.e("@@@@", "downloadMp3");}default:break;}}}
第二步:看看對sdcard中檔案的基本操作
package mars.util;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存放裝置的目錄 /SDCARD, Environment.getExternalStorageDirectory()這個方法比較通用SDPATH = Environment.getExternalStorageDirectory() + "/";}/** * 在SD卡上建立檔案 */public File creatSDFile(String fileName) throws IOException{File file = new File(SDPATH + fileName);file.createNewFile();return file;}/** * 在SD卡上建立目錄 */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//InputStream裡面的資料寫入到SD卡中的固定方法{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;}}
第三步:對下載的基本操作
package mars.util;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{/** * 根據URL下載檔案,前提是這個檔案當中的內容是文本,函數的傳回值就是檔案當中的內容 * 1.建立一個URL對象 * 2.通過URL對象,建立一個HttpURLConnection對象 * 3.得到InputStram * 4.從InputStream當中讀取資料 */private URL url = null;public String downStr(String urlStr)//下載字元流的方法{/** * String和StringBuffer他們都可以儲存和操作字串,即包含多個字元的字串資料。 * String類是字串常量,是不可更改的常量。而StringBuffer是字串變數,它的對象是可以擴充和修改的。 */StringBuffer sb = new StringBuffer();String line = null;BufferedReader buffer = null;//BufferedReader類用於從緩衝區中讀取內容try{/** * 因為直接使用InputStream不好用,多以嵌套了BufferedReader,這個是讀取字元流的固定格式。 */url = new URL(urlStr);// 建立一個URL對象HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();// 建立一個Http串連buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));// 使用IO流讀取資料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得到輸入資料流 */public InputStream getInputStreamFromUrl(String urlStr)throws MalformedURLException, IOException{url = new URL(urlStr);// 建立一個URL對象HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();// 建立一個Http串連InputStream inputStream = urlConn.getInputStream();//得到輸入資料流return inputStream;}}