您的位置:首页 > 理论基础 > 计算机网络

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

2014-12-22 17:26 661 查看
原创: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类:

点击(此处)折叠或打开

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



<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等待连接的超时问题...

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

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: