Chinaunix首页 | 论坛 | 博客

Go

  • 博客访问: 226465
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 783
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 16:29
文章分类

全部博文(67)

文章存档

2015年(1)

2014年(47)

2013年(19)

我的朋友

分类: Android平台

2014-09-29 23:25:49

原创: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类:

点击(此处)折叠或打开

  1. public class FileUtils {

  2.     private String SDPATH;

  3.     public String getSDPATH() {
  4.         return SDPATH;
  5.     }
  6.     public FileUtils() {           // 构造函数,new FileUtils 时就执行这个,
  7.         //得到当前外部存储设备的目录
  8.         // /SDCARD
  9.         SDPATH = Environment.getExternalStorageDirectory() + "/";
  10.     }
  11.     /**
  12.      * 在SD卡上创建文件
  13.      *
  14.      * @throws IOException
  15.      */
  16.     public File creatSDFile(String fileName) throws IOException {
  17.         File file = new File(SDPATH + fileName);
  18.         file.createNewFile();
  19.         return file;
  20.     }
  21.     
  22.     /**
  23.      * 在SD卡上创建目录
  24.      *
  25.      * @param dirName
  26.      */
  27.     public File creatSDDir(String dirName) {
  28.         File dir = new File(SDPATH + dirName);
  29.         dir.mkdirs();
  30.         return dir;
  31.     }

  32.     /**
  33.      * 判断SD卡上的文件夹是否存在
  34.      */
  35.     public boolean isFileExist(String fileName){
  36.         File file = new File(SDPATH + fileName);
  37.         return file.exists();
  38.     }
  39.     
  40.     /**
  41.      * 将一个InputStream里面的数据写入到SD卡中
  42.      */
  43.     public File write2SDFromInput(String path,String fileName,InputStream input){      //最大每次只能输出4K
  44.         File file = null;
  45.         OutputStream output = null;
  46.         try{
  47.             creatSDDir(path);
  48.             file = creatSDFile(path + fileName);
  49.             output = new FileOutputStream(file);
  50.             byte buffer [] = new byte[4 * 1024];
  51.             while((input.read(buffer)) != -1){
  52.                 output.write(buffer);
  53.             }
  54.             output.flush();
  55.         }
  56.         catch(Exception e){
  57.             e.printStackTrace();
  58.         }
  59.         finally{
  60.             try{
  61.                 output.close();
  62.             }
  63.             catch(Exception e){
  64.                 e.printStackTrace();
  65.             }
  66.         }
  67.         return file;
  68.     }

  69. }

mars视频教程ppt和代码01_18_src.zip






































阅读(2109) | 评论(0) | 转发(0) |
0

上一篇:android 操作数据库

下一篇:linux pwm 应用

给主人留下些什么吧!~~