Android 下载文件及写入SD卡,实例代码
?
?
?
- <?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文件"??
- ????/>??
- </LinearLayout>??
?
?
?
- <?xml?version="1.0"?encoding="utf-8"?>??
- <manifest?xmlns:android="http://schemas.android.com/apk/res/android"??
- ??????package="com.learning.example"??
- ??????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="8"?/>??
- ??
- <!--?访问网络和操作SD卡?加入的两个权限配置-->??
- <uses-permission?android:name="android.permission.INTERNET"/>??
- <uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>??
- </manifest>???
?
?
?
- package?com.learning.example.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?{??
- ??????
- ????private?URL?url?=?null;???
- ??????
- ????/**??
- ?????*?根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容??
- ?????*?1.创建一个URL对象??
- ?????*?2.通过URL对象,创建一个HttpURLConnection对象??
- ?????*?3.得到InputStream??
- ?????*?4.从InputStream当中读取数据??
- [email protected]
- [email protected]
- ?????*/??
- ????public?String?download(String?urlStr){??
- ????????StringBuffer?sb?=?new?StringBuffer();??
- ????????String?line?=?null;??
- ????????BufferedReader?buffer?=?null;??
- ????????try?{??
- ????????????url?=?new?URL(urlStr);??
- ????????????HttpURLConnection?urlConn?=?(HttpURLConnection)url.openConnection();??
- ????????????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?(IOException?e)?{??
- ????????????????e.printStackTrace();??
- ????????????}??
- ????????}??
- ????????return?sb.toString();??
- ????}??
- ??
- ????/**??
- ?????*???
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- ?????*??????-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?(IOException?e)?{??
- ????????????????e.printStackTrace();??
- ????????????}??
- ????????}??
- ????????return?0;??
- ????}??
- ??????
- ????/**??
- ?????*?根据URL得到输入流??
- [email protected]
- [email protected]
- ?????*/??
- ????public?InputStream?getInputStreamFromURL(String?urlStr)?{??
- ????????HttpURLConnection?urlConn?=?null;??
- ????????InputStream?inputStream?=?null;??
- ????????try?{??
- ????????????url?=?new?URL(urlStr);??
- ????????????urlConn?=?(HttpURLConnection)url.openConnection();??
- ????????????inputStream?=?urlConn.getInputStream();??
- ??????????????
- ????????}?catch?(MalformedURLException?e)?{??
- ????????????e.printStackTrace();??
- ????????}?catch?(IOException?e)?{??
- ????????????e.printStackTrace();??
- ????????}??
- ??????????
- ????????return?inputStream;??
- ????}??
- }??
?
?
?
- package?com.learning.example.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;??
- ??????
- ????private?int?FILESIZE?=?4?*?1024;???
- ??????
- ????public?String?getSDPATH(){??
- ????????return?SDPATH;??
- ????}??
- ??????
- ????public?FileUtils(){??
- ????????//得到当前外部存储设备的目录(?/SDCARD?)??
- ????????SDPATH?=?Environment.getExternalStorageDirectory()?+?"/";??
- ????}??
- ??????
- ????/**??
- ?????*?在SD卡上创建文件??
- [email protected]
- [email protected]
- [email protected]
- ?????*/??
- ????public?File?createSDFile(String?fileName)?throws?IOException{??
- ????????File?file?=?new?File(SDPATH?+?fileName);??
- ????????file.createNewFile();??
- ????????return?file;??
- ????}??
- ??????
- ????/**??
- ?????*?在SD卡上创建目录??
- [email protected]
- [email protected]
- ?????*/??
- ????public?File?createSDDir(String?dirName){??
- ????????File?dir?=?new?File(SDPATH?+?dirName);??
- ????????dir.mkdir();??
- ????????return?dir;??
- ????}??
- ??????
- ????/**??
- ?????*?判断SD卡上的文件夹是否存在??
- [email protected]
- [email protected]
- ?????*/??
- ????public?boolean?isFileExist(String?fileName){??
- ????????File?file?=?new?File(SDPATH?+?fileName);??
- ????????return?file.exists();??
- ????}??
- ??????
- ????/**??
- ?????*?将一个InputStream里面的数据写入到SD卡中??
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- ?????*/??
- ????public?File?write2SDFromInput(String?path,String?fileName,InputStream?input){??
- ????????File?file?=?null;??
- ????????OutputStream?output?=?null;??
- ????????try?{??
- ????????????createSDDir(path);??
- ????????????file?=?createSDFile(path?+?fileName);??
- ????????????output?=?new?FileOutputStream(file);??
- ????????????byte[]?buffer?=?new?byte[FILESIZE];??
- ????????????while((input.read(buffer))?!=?-1){??
- ????????????????output.write(buffer);??
- ????????????}??
- ????????????output.flush();??
- ????????}???
- ????????catch?(Exception?e)?{??
- ????????????e.printStackTrace();??
- ????????}??
- ????????finally{??
- ????????????try?{??
- ????????????????output.close();??
- ????????????}?catch?(IOException?e)?{??
- ????????????????e.printStackTrace();??
- ????????????}??
- ????????}??
- ????????return?file;??
- ????}??
- ??
- }??
?
?
?
- package?com.learning.example;??
- ??
- import?com.learning.example.util.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?{??
- ????private?Button?downlaodTxtButton?;??
- ????private?Button?downlaodMP3Button?;??
- ??????
- [email protected]
- ????public?void?onCreate(Bundle?savedInstanceState)?{??
- ????????super.onCreate(savedInstanceState);??
- ????????setContentView(R.layout.main);??
- ????????downlaodTxtButton?=?(Button)findViewById(R.id.downloadTxt);??
- ????????downlaodTxtButton.setOnClickListener(new?DownloadTxtListener());??
- ??????????
- ????????downlaodMP3Button?=?(Button)findViewById(R.id.downloadMp3);??
- ????????downlaodMP3Button.setOnClickListener(new?DownloadMP3Listener());??
- ????}??
- ??????
- ????class?DownloadTxtListener?implements?OnClickListener{??
- ??
- [email protected]
- ????????public?void?onClick(View?v)?{??
- ????????????HttpDownloader?downloader?=?new?HttpDownloader();??
- ????????????String?lrc?=?downloader.download("http://172.16.11.9:8080/test/1.lrc");??
- ????????????System.out.println(lrc);??
- ????????}??
- ??????????
- ????}??
- ??????
- ????class?DownloadMP3Listener?implements?OnClickListener{??
- ??
- [email protected]
- ????????public?void?onClick(View?v)?{??
- ????????????HttpDownloader?downloader?=?new?HttpDownloader();??
- ????????????int?result?=?downloader.downFile("http://172.16.11.9:8080/test/1.mp3",?"voa/",?"1.map3");??
- ????????????System.out.println(result);??
- ????????}??
- ??????????
- ????}??
- }??
?
Notice:访问网络和操作SD卡 记得加入的两个权限配置
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>