想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径:
Environment.getExternalStorageDirectory()
另外,在保存之前要判断SD卡是否已经安装好,并且可读写:
//判断SDcard是否存在并且可读写
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
service.saveToSDCard(filename,filecontent);
Toast.makeText(getApplicationContext(), R.string.success,1).show();
}else{
Toast.makeText(getApplicationContext(), R.string.sdcarderror,1).show();
}
实例
1. 下载存文本文件和下载如mp3等大容量的文件
2.代码编写
AndroidMainfest.xml中配置
主要是解决网络权限和写SDCard的权限
package="com.jingling.practice.downloadtest" >
android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" >
android:name=".MainActivity"android:label="@string/app_name" >
HttpDownloader.java
packageutil;importandroid.util.Log;importjava.io.BufferedReader;importjava.io.File;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;/*** Created by Spring on 2015/11/7.
* 下载工具类*/
public classHttpDownloader {private URL url = null;private final String TAG = "TAG";/*** 读取文本文件
*@paramurlStr url路径
*@return文本信息
* 根据url下载文件,前提是这个文件中的内容是文本,
* 1.创建一个URL对象
* 2.通过URL对象,创建一个Http连接
* 3.得到InputStream
* 4.从InputStream中得到数据*/
publicString download(String urlStr) {
StringBuffer sb= newStringBuffer();
String line= null;
BufferedReader bufferedReader= null;try{
url= newURL(urlStr);//创建http连接
HttpURLConnection urlConn =(HttpURLConnection) url.openConnection();//使用IO流读取数据
bufferedReader = new BufferedReader(newInputStreamReader(urlConn.getInputStream()));while ((line = bufferedReader.readLine()) != null) {
sb.append(line);
}
}catch(IOException e) {
e.printStackTrace();
}finally{try{
bufferedReader.close();
}catch(IOException e) {
e.printStackTrace();
}
}
Log.e("TAG","下载txt文件");
Log.e("TAG",sb.toString());returnsb.toString();
}/*** 读取任何文件
* 返回-1 ,代表下载失败。返回0,代表成功。返回1代表文件已经存在
*
*@paramurlStr
*@parampath
*@paramfileName
*@return
*/
public intdownlaodFile(String urlStr, String path, String fileName) {
InputStream input= null;try{
FileUtil fileUtil= newFileUtil();if (fileUtil.isFileExist(path +fileName)) {return 1;
}else{
input=getInputStearmFormUrl(urlStr);
File resultFile=fileUtil.write2SDFromInput(path,fileName,input);if (resultFile == null)return -1;
}
}catch(IOException e) {
e.printStackTrace();return -1;
}finally{try{
input.close();
}catch(IOException e) {
e.printStackTrace();
}
}return 0;
}public InputStream getInputStearmFormUrl(String urlStr) throwsIOException {
url= newURL(urlStr);
HttpURLConnection urlConn=(HttpURLConnection) url.openConnection();
InputStream input=urlConn.getInputStream();returninput;
}
}
FileUtil.java
packageutil;importandroid.os.Environment;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;/*** Created by Spring on 2015/11/7.*/
public classFileUtil {privateString SDPATH;publicFileUtil() {
}publicString getSDPATH() {returnSDPATH;
}publicFileUtil(String SDPATH){//得到外部存储设备的目录(/SDCARD)
SDPATH = Environment.getExternalStorageDirectory() + "/";
}/*** 在SD卡上创建文件
*@paramfileName
*@return*@throwsjava.io.IOException*/
public File createSDFile(String fileName) throwsIOException {
File file= new File(SDPATH +fileName);
file.createNewFile();returnfile;
}/*** 在SD卡上创建目录
*@paramdirName 目录名字
*@return文件目录*/
publicFile createDir(String dirName){
File dir= new File(SDPATH +dirName);
dir.mkdir();returndir;
}/*** 判断文件是否存在
*@paramfileName
*@return
*/
public booleanisFileExist(String fileName){
File file= new File(SDPATH +fileName);returnfile.exists();
}publicFile write2SDFromInput(String path,String fileName,InputStream input){
File file= null;
OutputStream output= null;try{
createDir(path);
file=createSDFile(path +fileName);
output= newFileOutputStream(file);byte [] buffer = new byte[4 * 1024];while(input.read(buffer) != -1){
output.write(buffer);
output.flush();
}
}catch(IOException e) {
e.printStackTrace();
}finally{try{
output.close();
}catch(IOException e) {
e.printStackTrace();
}
}returnfile;
}
}
3.MainActivity
packagecom.jingling.practice.downloadtest;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importutil.HttpDownloader;public class MainActivity extendsActivity {
HttpDownloader downloader ;privateButton btn_downFile;privateButton btn_downMP3;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_downFile= (Button)this.findViewById(R.id.button);
btn_downMP3= (Button)this.findViewById(R.id.button2);
btn_downFile.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {
downloader= newHttpDownloader();
String urlStr= "http://172.17.54.91:8080/download/down.txt";
downloader.download(urlStr);
}
});
btn_downMP3.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {
String urlStr="http://172.17.54.91:8080/download/1.mp3";
String path="file";
String fileName="2.mp3";
HttpDownloader httpDownloader= newHttpDownloader();
httpDownloader.downlaodFile(urlStr,path,fileName);
}
});
}
}