android:http下载文件并保存到本地或SD卡
想把文件保存到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卡的更多相关文章
- Android HTTP下载文件并保存到本地或SD卡
想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...
- java 从服务器下载文件并保存到本地
昨天在做一个项目时,用到了从服务器上下载文件并保存到本地的知识,以前也没有接触过,昨天搞了一天,这个小功能实现了,下面就简单的说一下实现过程: 1.基础知识 当我们想要下载网站上的某 ...
- android中使用Http下载文件并保存到本地SD卡
1.AndroidMainfest.xml中设置权限 <uses-permission android:name="android.permission.INTERNET"& ...
- Android 获取屏幕截图 和保存到本地的sd卡路径下
/** * 获取和保存当前屏幕的截图 */ private void GetandSaveCurrentImage() { //1.构建Bitmap WindowManager windowManag ...
- Java从指定URL下载文件并保存到指定目录
1.基本流程 当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步: (1)客户端发起一个url请求,获取连接对象. (2)服务器解析url,并且 ...
- BitmapUtil【缩放bitmap以及将bitmap保存成图片到SD卡中】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于缩放bitmap以及将bitmap保存成图片到SD卡中 效果图 代码分析 bitmapZoomByHeight(Bitmap s ...
- Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)
Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是 ...
- Android开发调试日志工具类[支持保存到SD卡]
直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...
- Android eclipse 运行项目设置程序默认安装到SD卡
Android eclipse 运行项目设置程序默认安装到SD卡 1.在Android手机启用USB调试功能 2.在Windows系统中打开命令提示符(开始菜单,选择运行,输入cmd回车即可),使用 ...
随机推荐
- PIL Image 转成 wx.Image、wx.Bitmap
import wx from PIL import Image def ConvertToWxImage(): pilImage = Image.open('1.png') image = wx.Em ...
- SCALA表达示简例
作了解,感觉比一般的差距有点大哟. package com.hengheng.scala class HelloScala { } object HelloScala { def main(args: ...
- CMOS和TTL的區別
TTL電路是晶體管-晶體管邏輯電路的英文縮寫(Transister-Transister-Logic ),是數字集成電路的一大門類.它采用雙極型工藝制造,具有高速度低功耗和品種多等特點. CMOS是: ...
- FFT多项式乘法加速
FFT基本操作...讲解请自己看大学信号转置系列... 15-5-30更新:改成结构体的,跪烂王学长啊啊啊啊机智的static... #include<iostream> #include ...
- linux下svn修改用户名和密码
1.临时更换,在命令下强制加上 --username 和--password选项, 例如:svn up --username zhangsan --password 123456 svn co URL ...
- 《Ruby语言入门教程v1.0》学习笔记-03
10.09 第七章 7.1 模块 Ruby标准包里的 Math 模块提供了许多方法,比如:求平方根 sqrt ,使用的时候要这么写:模块名.方法名(参数).如:Math.sqrt( a*5+b ) M ...
- 用Jpush极光推送实现抓取特定某个用户Log到七牛云服务器
场景 我们的app常常会出现某个特定用户的手机出现异常情况,(注意不是所有用户,特定机型特定用户)如果用友盟,那么多log你也抓不完 ,看不到log就无法解决问题. 那么问题来了,如何实现对特定某个用 ...
- Confluence简介
前言 我们有很多的知识共享的工具,比如我们每天都用的qq共享,网盘共享,但是都不如我们这个来的方便,直接.这个是直接通过网页的形式进行共享,类似于我们的博客共享,但是它更加的具有指向性,站点管 ...
- 用otl写的oracle取数工具,执行传入在查询语句,把结果输出到文件
项目中经常需要用到此类型的工具 #pragma warning (disable:4786) #include <iostream> #include <map> #inclu ...
- SKPhysicsContactDelegate协议
符合 NSObject 框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS .0或者更晚的版本 声明于 SKPhysicsWorl ...