android 网络下载文件 和 读写sdcard 方法

来源:互联网 发布:java接口压力测试工具 编辑:程序博客网 时间:2024/06/07 05:38
原创:kylin_zeng  http://blog.chinaunix.net/uid/23795897.html 在此感谢mars 老师的帮助。
转载请注明原创出处,尊重他人的劳动成果。


1、访问网络和sdcard 权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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("http://192.168.1.107:8080/voa1500/a1.lrc");
                 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("http://192.168.1.107:8080/voa1500/a1.mp3", "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






































<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(2) | 评论(0) | 转发(0) |
0

上一篇:android 操作数据库

下一篇:linux pwm 应用

相关热门文章
  • Android之开发环境搭建
  • Android自定义View的实现...
  • AndroidManifest.xml配置文件...
  • Android源码调试方法详解...
  • 不用vs和cygwin!Eclipse+cdt...
  • 请问Linux默认shell的是什么 ...
  • 谁能够帮我解决LINUX 2.6 10...
  • 现在的博客积分不会更新了吗?...
  • shell怎么读取网页内容...
  • ssh等待连接的超时问题...
给主人留下些什么吧!~~
原创粉丝点击