Android 下载文件及写入SD卡

简介: 引用:http://zhoujingxian.iteye.com/blog/859597 Android 下载文件及写入SD卡,实例代码   Main.xml代码                       Androidmanifest.

引用:http://zhoujingxian.iteye.com/blog/859597

Android 下载文件及写入SD卡,实例代码

 

Main.xml代码 
  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <Button    
  8.     android:id="@+id/downloadTxt"  
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="下载文本文件"  
  12.     />  
  13.   
  14. <Button    
  15.     android:id="@+id/downloadMp3"  
  16.     android:layout_width="fill_parent"   
  17.     android:layout_height="wrap_content"   
  18.     android:text="下载MP3文件"  
  19.     />  
  20. </LinearLayout>  

 

Androidmanifest.xml代码 
  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.learning.example"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".Download"  
  8.                   android:label="@string/app_name">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.   
  15.     </application>  
  16.     <uses-sdk android:minSdkVersion="8" />  
  17.   
  18. <!-- 访问网络和操作SD卡 加入的两个权限配置-->  
  19. <uses-permission android:name="android.permission.INTERNET"/>  
  20. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
  21. </manifest>   

 

下载助手类httpdownloader 代码 
  收藏代码
  1. package com.learning.example.util;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.MalformedURLException;  
  10. import java.net.URL;  
  11.   
  12. public class HttpDownloader {  
  13.       
  14.     private URL url = null;   
  15.       
  16.     /**  
  17.      * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容  
  18.      * 1.创建一个URL对象  
  19.      * 2.通过URL对象,创建一个HttpURLConnection对象  
  20.      * 3.得到InputStream  
  21.      * 4.从InputStream当中读取数据  
  22.      * @param urlStr  
  23.      * @return  
  24.      */  
  25.     public String download(String urlStr){  
  26.         StringBuffer sb = new StringBuffer();  
  27.         String line = null;  
  28.         BufferedReader buffer = null;  
  29.         try {  
  30.             url = new URL(urlStr);  
  31.             HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();  
  32.             buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));  
  33.             while( (line = buffer.readLine()) != null){  
  34.                 sb.append(line);  
  35.             }  
  36.               
  37.         }   
  38.         catch (Exception e) {  
  39.             e.printStackTrace();  
  40.         }  
  41.         finally{  
  42.             try {  
  43.                 buffer.close();  
  44.             } catch (IOException e) {  
  45.                 e.printStackTrace();  
  46.             }  
  47.         }  
  48.         return sb.toString();  
  49.     }  
  50.   
  51.     /**  
  52.      *   
  53.      * @param urlStr  
  54.      * @param path  
  55.      * @param fileName  
  56.      * @return   
  57.      *      -1:文件下载出错  
  58.      *       0:文件下载成功  
  59.      *       1:文件已经存在  
  60.      */  
  61.     public int downFile(String urlStr, String path, String fileName){  
  62.         InputStream inputStream = null;  
  63.         try {  
  64.             FileUtils fileUtils = new FileUtils();  
  65.               
  66.             if(fileUtils.isFileExist(path + fileName)){  
  67.                 return 1;  
  68.             } else {  
  69.                 inputStream = getInputStreamFromURL(urlStr);  
  70.                 File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);  
  71.                 if(resultFile == null){  
  72.                     return -1;  
  73.                 }  
  74.             }  
  75.         }   
  76.         catch (Exception e) {  
  77.             e.printStackTrace();  
  78.             return -1;  
  79.         }  
  80.         finally{  
  81.             try {  
  82.                 inputStream.close();  
  83.             } catch (IOException e) {  
  84.                 e.printStackTrace();  
  85.             }  
  86.         }  
  87.         return 0;  
  88.     }  
  89.       
  90.     /**  
  91.      * 根据URL得到输入流  
  92.      * @param urlStr  
  93.      * @return  
  94.      */  
  95.     public InputStream getInputStreamFromURL(String urlStr) {  
  96.         HttpURLConnection urlConn = null;  
  97.         InputStream inputStream = null;  
  98.         try {  
  99.             url = new URL(urlStr);  
  100.             urlConn = (HttpURLConnection)url.openConnection();  
  101.             inputStream = urlConn.getInputStream();  
  102.               
  103.         } catch (MalformedURLException e) {  
  104.             e.printStackTrace();  
  105.         } catch (IOException e) {  
  106.             e.printStackTrace();  
  107.         }  
  108.           
  109.         return inputStream;  
  110.     }  
  111. }  

 

文件操作类fileutils 代码 
  收藏代码
  1. package com.learning.example.util;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8.   
  9. import android.os.Environment;  
  10.   
  11. public class FileUtils {  
  12.     private String SDPATH;  
  13.       
  14.     private int FILESIZE = 4 * 1024;   
  15.       
  16.     public String getSDPATH(){  
  17.         return SDPATH;  
  18.     }  
  19.       
  20.     public FileUtils(){  
  21.         //得到当前外部存储设备的目录( /SDCARD )  
  22.         SDPATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";  
  23.     }  
  24.       
  25.     /**  
  26.      * 在SD卡上创建文件  
  27.      * @param fileName  
  28.      * @return  
  29.      * @throws IOException  
  30.      */  
  31.     public File createSDFile(String fileName) throws IOException{  
  32.         File file = new File(SDPATH + fileName);  
  33.         file.createNewFile();  
  34.         return file;  
  35.     }  
  36.       
  37.     /**  
  38.      * 在SD卡上创建目录  
  39.      * @param dirName  
  40.      * @return  
  41.      */  
  42.     public File createSDDir(String dirName){  
  43.         File dir = new File(SDPATH + dirName);  
  44.         dir.mkdir();  
  45.         return dir;  
  46.     }  
  47.       
  48.     /**  
  49.      * 判断SD卡上的文件夹是否存在  
  50.      * @param fileName  
  51.      * @return  
  52.      */  
  53.     public boolean isFileExist(String fileName){  
  54.         File file = new File(SDPATH + fileName);  
  55.         return file.exists();  
  56.     }  
  57.       
  58.     /**  
  59.      * 将一个InputStream里面的数据写入到SD卡中  
  60.      * @param path  
  61.      * @param fileName  
  62.      * @param input  
  63.      * @return  
  64.      */  
  65.     public File write2SDFromInput(String path,String fileName,InputStream input){  
  66.         File file = null;  
  67.         OutputStream output = null;  
  68.         try {  
  69.             createSDDir(path);  
  70.             file = createSDFile(path + fileName);  
  71.             output = new FileOutputStream(file);  
  72.             byte[] buffer = new byte[FILESIZE];  
  73.             while((input.read(buffer)) != -1){  
  74.                 output.write(buffer);  
  75.             }  
  76.             output.flush();  
  77.         }   
  78.         catch (Exception e) {  
  79.             e.printStackTrace();  
  80.         }  
  81.         finally{  
  82.             try {  
  83.                 output.close();  
  84.             } catch (IOException e) {  
  85.                 e.printStackTrace();  
  86.             }  
  87.         }  
  88.         return file;  
  89.     }  
  90.   
  91. }  

 

主程序类download 代码 
  收藏代码
  1. package com.learning.example;  
  2.   
  3. import com.learning.example.util.HttpDownloader;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10.   
  11. public class Download extends Activity {  
  12.     private Button downlaodTxtButton ;  
  13.     private Button downlaodMP3Button ;  
  14.       
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         downlaodTxtButton = (Button)findViewById(R.id.downloadTxt);  
  20.         downlaodTxtButton.setOnClickListener(new DownloadTxtListener());  
  21.           
  22.         downlaodMP3Button = (Button)findViewById(R.id.downloadMp3);  
  23.         downlaodMP3Button.setOnClickListener(new DownloadMP3Listener());  
  24.     }  
  25.       
  26.     class DownloadTxtListener implements OnClickListener{  
  27.   
  28.         @Override  
  29.         public void onClick(View v) {  
  30.             HttpDownloader downloader = new HttpDownloader();  
  31.             String lrc = downloader.download("http://172.16.11.9:8080/test/1.lrc");  
  32.             System.out.println(lrc);  
  33.         }  
  34.           
  35.     }  
  36.       
  37.     class DownloadMP3Listener implements OnClickListener{  
  38.   
  39.         @Override  
  40.         public void onClick(View v) {  
  41.             HttpDownloader downloader = new HttpDownloader();  
  42.             int result = downloader.downFile("http://172.16.11.9:8080/test/1.mp3""voa/""1.map3");  
  43.             System.out.println(result);  
  44.         }  
  45.           
  46.     }  
  47. }  

Notice:访问网络和操作SD卡 记得加入的两个权限配置

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

相关文章
|
5月前
|
存储 缓存 Android开发
安卓Jetpack Compose+Kotlin, 使用ExoPlayer播放多个【远程url】音频,搭配Okhttp库进行下载和缓存,播放完随机播放下一首
这是一个Kotlin项目,使用Jetpack Compose和ExoPlayer框架开发Android应用,功能是播放远程URL音频列表。应用会检查本地缓存,如果文件存在且大小与远程文件一致则使用缓存,否则下载文件并播放。播放完成后或遇到异常,会随机播放下一首音频,并在播放前随机设置播放速度(0.9到1.2倍速)。代码包括ViewModel,负责音频管理和播放逻辑,以及UI层,包含播放和停止按钮。
|
1月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
3月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
283 1
|
3月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
244 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
29天前
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
33 2
|
5月前
|
存储 数据库 Android开发
安卓Jetpack Compose+Kotlin,支持从本地添加音频文件到播放列表,支持删除,使用ExoPlayer播放音乐
为了在UI界面添加用于添加和删除本地音乐文件的按钮,以及相关的播放功能,你需要实现以下几个步骤: 1. **集成用户选择本地音乐**:允许用户从设备中选择音乐文件。 2. **创建UI按钮**:在界面中创建添加和删除按钮。 3. **数据库功能**:使用Room数据库来存储音频文件信息。 4. **更新ViewModel**:处理添加、删除和播放音频文件的逻辑。 5. **UI实现**:在UI层支持添加、删除音乐以及播放功能。
|
1月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
119 0
|
3月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
132 1
|
3月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
467 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82