您的位置:首页 > 移动开发 > Android开发

Android开发九:从网上下载文件并存储到SD卡中

2012-03-04 22:37 495 查看
今天接着学习android下载文件,这几天没有时间,要准备找工作了,还没有学好呢,而且白天还有别的事忙。代码的讲解就很少了,但是重要的部分都有注释的,也不难理解,因为这种情况,博客也不往首页挂了...

直接进入正题,布局文件里面有一个文本框用来输入网址,我写了个默认的放里边了,百度的LOGO。后面就是一个下载按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<EditText
android:text="http://www.baidu.com/img/baidu_jgylogo3.gif"
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textUri"></EditText>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/downbtn"
android:layout_gravity="center" />

</LinearLayout>


下面看代码就明白了,都注释上了

package com.yyj.DownloadAndStore;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class DownloadAndStoreActivity extends Activity {
/** Called when the activity is first created. */
Button button;
EditText editText;
URL url;
//获取SDCard根目录
String sdcard=Environment.getExternalStorageDirectory()+"/";
//这个是要保存的目录
String filepath=sdcard+"yyjdownload/";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

editText=(EditText)findViewById(R.id.editText1);
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String urlString=editText.getText().toString();
//url字符串,如果前面不加http://会异常,这里不考虑ftp情况
urlString=(urlString.startsWith("http://"))?urlString:"http://"+urlString;
try {
url=new URL(urlString);
//打开到url的连接
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//以下为java IO部分,大体来说就是先检查文件夹是否存在,不存在则创建,然后的文件名重复问题,没有考虑
InputStream istream=connection.getInputStream();
String filename=urlString.substring(urlString.lastIndexOf("/")+1);

File dir=new File(filepath);
if (!dir.exists()) {
dir.mkdir();
}
File file=new File(filepath+filename);
file.createNewFile();

OutputStream output=new FileOutputStream(file);
byte[] buffer=new byte[1024*4];
while (istream.read(buffer)!=-1) {
output.write(buffer);
}
output.flush();
output.close();
istream.close();
//最后toast出文件名,因为这个程序是单线程的,所以要下载完文件以后才会执行这一句,中间的时间类似于死机,不过多线程还没有学到
Toast.makeText(DownloadAndStoreActivity.this, filename, Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}

}
});
}
}


最后如果要正常运行的话,还要在AndroidManifest.xml文件中定义权限

<!--连接网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 写入存储卡数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


没有什么难理解的这节,我下去继续学习...

哪位朋友给介绍个工作呗,要求北京,做android的,虽然我现在还没有学完,但是相信我,我有很强的学习能力,然后就是动手能力,谢谢了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐