想把文件保存到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的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jingling.practice.downloadtest" > <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" > <activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

HttpDownloader.java

package util;

import android.util.Log;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL; /**
* Created by Spring on 2015/11/7.
* 下载工具类
*/
public class HttpDownloader {
private URL url = null;
private final String TAG = "TAG"; /**
* 读取文本文件
* @param urlStr url路径
* @return 文本信息
* 根据url下载文件,前提是这个文件中的内容是文本,
* 1.创建一个URL对象
* 2.通过URL对象,创建一个Http连接
* 3.得到InputStream
* 4.从InputStream中得到数据
*/
public String download(String urlStr) {
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader bufferedReader = null; try {
url = new URL(urlStr);
//创建http连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
//使用IO流读取数据
bufferedReader = new BufferedReader(new InputStreamReader(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());
return sb.toString();
} /**
* 读取任何文件
* 返回-1 ,代表下载失败。返回0,代表成功。返回1代表文件已经存在
*
* @param urlStr
* @param path
* @param fileName
* @return
*/
public int downlaodFile(String urlStr, String path, String fileName) {
InputStream input = null; try {
FileUtil fileUtil = new FileUtil();
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) throws IOException {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
InputStream input = urlConn.getInputStream();
return input;
}
}

FileUtil.java

package util;

import android.os.Environment;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; /**
* Created by Spring on 2015/11/7.
*/
public class FileUtil {
private String SDPATH; public FileUtil() { } public String getSDPATH() {
return SDPATH;
} public FileUtil(String SDPATH){
//得到外部存储设备的目录(/SDCARD)
SDPATH = Environment.getExternalStorageDirectory() + "/" ;
} /**
* 在SD卡上创建文件
* @param fileName
* @return
* @throws java.io.IOException
*/
public File createSDFile(String fileName) throws IOException {
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
} /**
* 在SD卡上创建目录
* @param dirName 目录名字
* @return 文件目录
*/
public File createDir(String dirName){
File dir = new File(SDPATH + dirName);
dir.mkdir();
return dir;
} /**
* 判断文件是否存在
* @param fileName
* @return
*/
public boolean isFileExist(String fileName){
File file = new File(SDPATH + fileName);
return file.exists();
} public File write2SDFromInput(String path,String fileName,InputStream input){
File file = null;
OutputStream output = null; try {
createDir(path);
file =createSDFile(path + fileName);
output = new FileOutputStream(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();
}
}
return file;
}
}

3.MainActivity

package com.jingling.practice.downloadtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; import util.HttpDownloader; public class MainActivity extends Activity {
HttpDownloader downloader ; private Button btn_downFile;
private Button btn_downMP3; @Override
protected void onCreate(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(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloader = new HttpDownloader();
String urlStr = "http://172.17.54.91:8080/download/down.txt";
downloader.download(urlStr);
}
});
btn_downMP3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String urlStr="http://172.17.54.91:8080/download/1.mp3";
String path="file";
String fileName="2.mp3";
HttpDownloader httpDownloader = new HttpDownloader();
httpDownloader.downlaodFile(urlStr,path,fileName);
}
});
} }

android:http下载文件并保存到本地或SD卡的更多相关文章

  1. Android HTTP下载文件并保存到本地或SD卡

    想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...

  2. java 从服务器下载文件并保存到本地

    昨天在做一个项目时,用到了从服务器上下载文件并保存到本地的知识,以前也没有接触过,昨天搞了一天,这个小功能实现了,下面就简单的说一下实现过程: 1.基础知识          当我们想要下载网站上的某 ...

  3. android中使用Http下载文件并保存到本地SD卡

    1.AndroidMainfest.xml中设置权限 <uses-permission android:name="android.permission.INTERNET"& ...

  4. Android 获取屏幕截图 和保存到本地的sd卡路径下

    /** * 获取和保存当前屏幕的截图 */ private void GetandSaveCurrentImage() { //1.构建Bitmap WindowManager windowManag ...

  5. Java从指定URL下载文件并保存到指定目录

    1.基本流程 当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步: (1)客户端发起一个url请求,获取连接对象. (2)服务器解析url,并且 ...

  6. BitmapUtil【缩放bitmap以及将bitmap保存成图片到SD卡中】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于缩放bitmap以及将bitmap保存成图片到SD卡中 效果图 代码分析 bitmapZoomByHeight(Bitmap s ...

  7. Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)

    Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是 ...

  8. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  9. Android eclipse 运行项目设置程序默认安装到SD卡

    Android eclipse 运行项目设置程序默认安装到SD卡  1.在Android手机启用USB调试功能 2.在Windows系统中打开命令提示符(开始菜单,选择运行,输入cmd回车即可),使用 ...

随机推荐

  1. SQL数据库增删改查

    数据类型 运行cmd 输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver     关闭数据库服务 输入net pause MSSQLserve ...

  2. 高效率dc升壓轉換器 應用技巧談 功率設計

    為便攜式電子設備開發電源電路要求設計工程師通過最大程度地提高功率和降低整個系統的功耗來延長電池使用壽命,這推動器件本身的尺寸變得更小,從而有益于在設計終端產品時獲得更高靈活性.這種設計的最重要元器件之 ...

  3. COJ 0580 4021征兵方案

    4021征兵方案 难度级别: C: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 现在需要征募女兵N人,男兵M人,每征募一个人 ...

  4. OI记忆口诀

    splay_rotate: inline void rotate(splay_node *x){ splay_node *y,*z;int d1,d2; d1=get_parent(x,y);//三个 ...

  5. 【转】Android开发学习笔记:EditText的属性介绍

    原文网址:http://liangruijun.blog.51cto.com/3061169/627350 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  6. MapReduce执行过程源码分析(一)——Job任务的提交

    为了能使源码的执行过程与Hadoop权威指南(2.3版)中章节Shuffle and Sort的分析相对应,Hadoop的版本为0.20.2. 一般情况下我们通过Job(org.apache.hado ...

  7. javascript正则表达式(二)——方法

    正则表达式规则见:http://www.cnblogs.com/wishyouhappy/p/3756812.html,下面说明相关方法 String相关方法 概括: search() replace ...

  8. word页面不对齐,如何解决?

    http://blog.163.com/haibianfeng_yr/blog/static/34572620201157105439516/

  9. J - Sabotage - UVA 10480(最大流)

    题目大意:旧政府有一个很庞大的网络系统,可以很方便的指挥他的城市,起义军为了减少伤亡所以决定破坏他们的网络,使他们的首都(1号城市)和最大的城市(2号城市)不能联系,不过破坏不同的网络所花费的代价是不 ...

  10. javascript获取对应页面的代码

    window.onload = function () { function getUrls(url) {//核心代码是url2这行代码,通过.replace()方法将对应的字符串替换成其他方式 va ...