原创:kylin_zeng http://blog.chinaunix.net/uid/23795897.html 在此感谢mars 老师的帮助。
转载请注明原创出处,尊重他人的劳动成果。
1、访问网络和sdcard 权限:
2、创建两个按钮:
downloadTxtButton = (Button)findViewById(R.id.downloadTxt);
downloadTxtButton.setOnClickListener(new DownloadTxtListener());
downloadMp3Button = (Button)findViewById(R.id.downloadMp3);
downloadMp3Button.setOnClickListener(new DownloadMp3Listener());
3、设置监听器:
class DownloadTxtListener implements OnClickListener{
@Override
public void onClick(View v) {
HttpDownloader httpDownloader = new HttpDownloader(); //这个是下载的类自己封装的类
String lrc = httpDownloader.download("");
System.out.println(lrc);
}
}
class DownloadMp3Listener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
HttpDownloader httpDownloader = new HttpDownloader();
int result = httpDownloader.downFile("", "voa/", "a1.mp3");
System.out.println(result);
}
}
4、下载的 HttpDownloader 类:
/**
* 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
* 1.创建一个URL对象
* 2.通过URL对象,创建一个HttpURLConnection对象
* 3.得到InputStram
* 4.从InputStream当中读取数据
* @param urlStr
* @return
*/
public class HttpDownloader {
private URL url = null;
public String download(String urlStr) { //download 函数,实现下载后返回字符串。
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader buffer = null;
try {
// 创建一个URL对象
url = new URL(urlStr);
// 创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 使用IO流读取数据
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 (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
/**
* 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在
*/
public int downFile(String urlStr, String path, String fileName) {
InputStream inputStream = null;
try {
FileUtils fileUtils = new FileUtils(); //FileUtils 是自己定义的一个读写sdcard的类
if (fileUtils.isFileExist(path + fileName)) {
return 1;
} else {
inputStream = getInputStreamFromUrl(urlStr); //自己定义的一个函数,从给的url网址获取数据流,见下面
File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream); //FileUtils 类里面的一个函数,讲数据流写到sdcard中。
if (resultFile == null) {
return -1;
}
}
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
/**
* 根据URL得到输入流
*
* @param urlStr
* @return
* @throws MalformedURLException
* @throws IOException
*/
public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException, IOException {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}
}
5、读写sdcard的FileUtils类:
-
public class FileUtils {
-
-
private String SDPATH;
-
-
public String getSDPATH() {
-
return SDPATH;
-
}
-
public FileUtils() { // 构造函数,new FileUtils 时就执行这个,
-
//得到当前外部存储设备的目录
-
// /SDCARD
-
SDPATH = Environment.getExternalStorageDirectory() + "/";
-
}
-
/**
-
* 在SD卡上创建文件
-
*
-
* @throws IOException
-
*/
-
public File creatSDFile(String fileName) throws IOException {
-
File file = new File(SDPATH + fileName);
-
file.createNewFile();
-
return file;
-
}
-
-
/**
-
* 在SD卡上创建目录
-
*
-
* @param dirName
-
*/
-
public File creatSDDir(String dirName) {
-
File dir = new File(SDPATH + dirName);
-
dir.mkdirs();
-
return dir;
-
}
-
-
/**
-
* 判断SD卡上的文件夹是否存在
-
*/
-
public boolean isFileExist(String fileName){
-
File file = new File(SDPATH + fileName);
-
return file.exists();
-
}
-
-
/**
-
* 将一个InputStream里面的数据写入到SD卡中
-
*/
-
public File write2SDFromInput(String path,String fileName,InputStream input){ //最大每次只能输出4K
-
File file = null;
-
OutputStream output = null;
-
try{
-
creatSDDir(path);
-
file = creatSDFile(path + fileName);
-
output = new FileOutputStream(file);
-
byte buffer [] = new byte[4 * 1024];
-
while((input.read(buffer)) != -1){
-
output.write(buffer);
-
}
-
output.flush();
-
}
-
catch(Exception e){
-
e.printStackTrace();
-
}
-
finally{
-
try{
-
output.close();
-
}
-
catch(Exception e){
-
e.printStackTrace();
-
}
-
}
-
return file;
-
}
-
-
}
mars视频教程ppt和代码01_18_src.zip
阅读(2109) | 评论(0) | 转发(0) |