1、Androidmanifest.xml的文件一定要加上权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="chester.download"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".DownLoadexample" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2、activity代码如下:
package chester.download; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import chester.utils.HttpDownloader; /** * *@title DownLoadexample *@describe TODO 使用http协议下载txt文件和mp3文件 *@author Chester *@date 2011-11-4 *@version V1.0 */ public class DownLoadexample extends Activity { private Button downloadtxtButton =null; private Button downloadfilebuButton=null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /** * 得到两个button控件对象 */ downloadtxtButton=(Button)findViewById(R.id.downloadtxtbutton); downloadfilebuButton=(Button)findViewById(R.id.downloadmp3button); downloadtxtButton.setOnClickListener(new TxtButtonListener()); downloadfilebuButton.setOnClickListener(new FileButtonListener()); } /** * *@title TxtButtonLinstener *@describe TODO 使用内部类实现TxtButtonLinstener监听器 *@author Chester *@date 2011-11-4 *@version V1.0 */ class TxtButtonListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub //HttpDownloader 是自己写的类,封装起来,以后使用方便 HttpDownloader httpDownloader=new HttpDownloader(); //根据URL得到文件 String str=httpDownloader.downloadfile("http://3g.sina.com.cn/"); //得到的是sina的wap包wml语言 System.out.println(str); Toast.makeText(DownLoadexample.this, str, Toast.LENGTH_LONG).show(); } } /** * *@title FileButtonListener *@describe TODO 使用内部类实现Mp3ButtonLinstener监听器 *@author Chester *@date 2011-11-4 *@version V1.0 */ class FileButtonListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub HttpDownloader httpDownloader=new HttpDownloader(); int mp3int=httpDownloader.downloadFile("http://u.androidgame-store.com/android1/new/game1/24/110424/kwplayer_1.apk", "mymp3", "chester.apk"); Toast.makeText(DownLoadexample.this, mp3int+"/", Toast.LENGTH_SHORT).show(); } } }
3、HttpDownloader类的代码
package chester.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; /** * *@title HttpDownloader *@describe TODO 根据URL下载文件类 * 1、首先创建一个URL对象 * 2、根据URL对象,创建一个HttpURLConnection对象 * 3、得到IputStream * 4、从IputStream当中读取数据 *@author Chester *@date 2011-11-4 *@version V1.0 */ public class HttpDownloader { private URL url=null; /** * *@title download *@describe TODO 根据url下载文件,前提是这个文件当中的内容是文本,函数返回值是这个文件的文本内容 *@param @param urlsString *@param @return *@throws */ public String downloadfile(String urlString) { StringBuffer stringBuffer=new StringBuffer(); String line=null; BufferedReader bufferedReader=null; try { //创建一个URL对象 url=new URL(urlString); //创建一个http连接 HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection(); //使用IO流读取数据 bufferedReader=new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); while ((line=bufferedReader.readLine())!=null) { stringBuffer.append(line); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ //下面还有加上try,有可能关不了 try { bufferedReader.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } return stringBuffer.toString(); } /** * *@title downFile *@describe TODO 该函数可以下载任意文件。返回-1:代表下载文件出错,0:代表下载文件成功,1:代表文件已经存在 *@param @param urString 网络地址 *@param @param path 存放路径 *@param @param fileName 存放文件名 *@param @return *@throws */ public int downloadFile(String urlStr,String path,String fileName) { InputStream inputStream=null; try { FileUtils fileUtils=new FileUtils(); //判断文件是否存在,存在则返回1 path+"/"+fileName这个参数一定要写对。 if (fileUtils.isFileExist(path+"/"+fileName)) { return 1; }else { //根据URL得到输入流 inputStream=getInputStreamFromUrl(urlStr); File resultFile=fileUtils.write2SDFromInput(path, fileName, inputStream); if (resultFile==null) { //文件是空的就返回-1 return -1; } } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ try { inputStream.close(); } catch (Exception e2) { // TODO: handle exception e2.printStackTrace(); } } return 0; } /** * *@title getInputStreamFromUrl *@describe TODO 根据URL得到输入流 *@param @param urlstr *@param @return *@param @throws MalformedURLException *@param @throws IOException *@throws */ public InputStream getInputStreamFromUrl(String urlstr) throws MalformedURLException,IOException{ url=new URL(urlstr); HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection(); InputStream inputStream=httpURLConnection.getInputStream(); return inputStream; } }
4、FileUtils代码
package chester.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; /** * *@title FileUtils *@describe TODO *@author Chester *@date 2011-11-4 *@version V1.0 */ public class FileUtils { //路径 private String SDPATH; /** * *@title getSDPATH *@describe TODO *@param @return *@throws */ public String getSDPATH() { return SDPATH; } /** * *@Title *@describe TODO 构造函数,得到SD当前目录 *@param */ public FileUtils(){ //得到当前外部存储设备的目录 // /SDCARD SDPATH=Environment.getExternalStorageDirectory()+"/"; } /** * *@title createSDFile *@describe TODO 在SD卡中创建文件 *@param @param fileName *@param @return *@param @throws IOException *@throws */ public File createSDFile(String fileName) throws IOException{ File file = new File(SDPATH + fileName); file.createNewFile(); return file; } /** * *@title createSDDir *@describe TODO 在SD卡上创建目录 *@param @param fileName *@param @return *@throws */ public File createSDDir(String fileName) { File dir =new File(SDPATH+fileName); dir.mkdir(); return dir; } /** * *@title isFileExist *@describe TODO 判定SD卡中的文件夹是否存在 *@param @param fileName *@param @return *@throws */ public boolean isFileExist(String fileName) { File file = new File(SDPATH + fileName); return file.exists(); } /** * *@title write2SDFromInput *@describe TODO 将一个inputstream的数据写入到SD卡中 *@param @param path *@param @param fileName *@param @param inputStream *@param @return *@throws */ public File write2SDFromInput(String path,String fileName,InputStream inputStream) { File file=null; OutputStream outputStream=null; try { //创建文件夹 createSDDir(path); //在path文件夹下创建文件,+"/"这个必须加 file=createSDFile(path+"/"+fileName); outputStream=new FileOutputStream(file); //每一个以4K的速度写入 byte buffer[]=new byte[4*1024]; while ((inputStream.read(buffer))!=-1) { outputStream.write(buffer); } //清空一下缓存 outputStream.flush(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally{ try { //把打开的流关闭掉 outputStream.close(); } catch (Exception e2) { // TODO: handle exception e2.printStackTrace(); } } return file; } }