当前位置: 代码迷 >> Android >> android利用http协议下载网页内容到指定位置的步骤
  详细解决方案

android利用http协议下载网页内容到指定位置的步骤

热度:60   发布时间:2016-04-28 07:44:51.0
android利用http协议下载网页内容到指定位置的方法

源码如下:



public class LoadTestActivity extends Activity {		private TextView tv;	private URL url;	    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();        String urlStr="http://www.eoeandroid.com/thread-108676-1-1.html";        tv.setText(getWebText(urlStr));        //loadToSdcard(urlStr,"/TTTTT","Ada的文件.txt");        loadToLocation(urlStr,"Abc.txt");    }    //初始化组件    public void init(){    	tv=(TextView)findViewById(R.id.tv);    }    //获取文件流    private InputStream getInputStream(String urlStr){    	InputStream is = null;    	try {			url=new URL(urlStr);			HttpURLConnection conn=(HttpURLConnection)url.openConnection();			conn.setRequestMethod("POST");			conn.setConnectTimeout(5000);			conn.connect();			is=conn.getInputStream();		} catch (MalformedURLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (ProtocolException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return is;    }        //获取网页文本内容    private String getWebText(String urlStr){    	InputStream is=getInputStream(urlStr);    	StringBuffer sb=new StringBuffer();    	BufferedReader br=new BufferedReader(new InputStreamReader(is));    	String s="";    	try {			while((s=br.readLine())!=null){				sb.append(s);			}		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();			Log.e("TAG", "流文件读写错误");		}    	finally{    		try {				br.close();			} catch (IOException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}    	}    	return sb.toString();    }        //下载文件    private void downloader(InputStream is,String path,String filename){    	String filepath=null;    	if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){    		filepath=Environment.getExternalStorageDirectory()+path;    		    	}    	else{    		Toast.makeText(LoadTestActivity.this, "SDCard异常,请检查SDCard是否安装正确!", Toast.LENGTH_LONG).show();    	}    	if(!filepathExist(filepath)){    		createFilepath(filepath);    	}    	if(!fileExist(filepath+"/"+filename)){    		createFile(is,filepath,filename);    	}    }        //判断文件路径是否存在    private boolean filepathExist(String filepath){    	File file=new File(filepath);    	return file.exists();    }    //创建文件路径    private void createFilepath(String filepath){    	File file=new File(filepath);    	file.mkdirs();    }        //判断文件是否存在    private boolean fileExist(String filename){    	return filepathExist(filename);    }    //创建文件    private void createFile(InputStream is,String filepath,String filename){    	File file=new File(filepath+"/"+filename);    	OutputStream os=null;    	try {			os=new FileOutputStream(file);			int len=0;			byte[] buffer=new byte[1024];			while((len=is.read(buffer))!=-1){				os.write(buffer, 0, len);			}		} catch (FileNotFoundException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}   	    }        //下载文件到SDCard    private void loadToSdcard(String url,String filepath,String filename){    	InputStream is=getInputStream(url);    	downloader(is,filepath,filename);    }        //下载文件到应用所在的本地目录    private void loadToLocation(String urlStr,String filename){    	InputStream is=getInputStream(urlStr);    	OutputStream os=null;    	try {			os=this.openFileOutput(filename, Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE);			byte[] buffer=new byte[1024];			int len=0;			while((len=is.read(buffer))!=-1){				os.write(buffer, 0, len);			}		} catch (FileNotFoundException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}    	    }    }







不要忘记了在AndroidManifest.xml中添加权限:


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>


注意:

一、loadToLocation(String urlStr,String filename)这个方法是把下载的内容放到以filename命名的文件当中,这个以filename命名的文件被放在应用所在的本地目录,可以通过以下方法来找到并查看它当中的内容:

在Eclipse中按以下路径进行查找:Window---Open perspective---Hierarchy  View---File  Explorer---data---data---<package  name,该程序所在包的包名>---files

通过上面的步骤就可以找到该文件了。


二、loadToSdcard(String url,String filepath,String filename)这个方法是把下载的内容放到sdcard中的以filepath命名的文件夹中的那个以filename命名的文件当中。可以打开android手机当中的“文件管理器”---sdcard---以filepath命名的文件夹,找到以filename命名的文件来查看所下载的内容。




  相关解决方案