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

本文介绍了一个Android应用程序中实现的文件加载与下载功能。通过不同的方法可以将远程资源加载到应用内部存储或外部SD卡上,并提供了详细的实现代码。文章还强调了在AndroidManifest.xml中配置必要的权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码如下:




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命名的文件来查看所下载的内容。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值