mars老师[Android开发视频教学].01_18 文件下载 源码
项目截图:
以下是项目各个文件的代码:
=>>Download.java
- package mars.download;
- import mars.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 Download 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.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{
- @Override
- public void onClick(View v) {
- HttpDownloader httpDownloader = new HttpDownloader();
- String lrc = httpDownloader.download("http://192.168.1.107:8080/voa1500/a1.lrc");
- System.out.println(lrc);
- }
- }
- class DownloadMp3Listener implements OnClickListener{
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- HttpDownloader httpDownloader = new HttpDownloader();
- int result = httpDownloader.downFile("http://192.168.1.107:8080/voa1500/a1.mp3", "voa/", "a1.mp3");
- System.out.println(result);
- }
- }
- }
=>>HttpDownloader.java
- package mars.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;
- }
- }
=>>FileUtils.java
- package mars.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.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{
- 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;
- }
- }
=>>AndroidMainfest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="mars.download"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".Download"
- 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="4" />
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- </manifest>
=>>main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/downloadTxt"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="下载文本文件"
- />
- <Button
- android:id="@+id/downloadMp3"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="下载MP3文件 "
- />