[android] 保存文件到SD卡
/****************2016年5月4日 更新*****************************/
知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/data/data/目录下?
Android本身提供了/data/data/com.companyname.appname/这个路径供广大app存放configuration以及user data之类的东西,为什么很多App要把配置文件甚至log写到/sdcard目录下面?刚试了一下,禁用掉QQ的”修改手机存储空间“权限,手机QQ连发图片都发不出去了。。。
---
想问一下,/data/data/com.companyname.appname/目录里的数据有什么限制么?比如空间大小限制?写到/sdcard里,又有什么优势么?
祈雨蓝:
没有限制 另外对应着 SD卡上也有一个文件夹 /Android/data/包名,这个文件夹也是用来给程序放应用数据的,此文件夹读写在4.4及以后不需要外置储存区读写权限。
这两个文件夹区别在于 data 分区有权限控制,除非应用自己同意,否则其他应用无法读取内部的数据,而sdcard/Android下的文件只要有外置空间读取权限就可以读取。所以data下一般放私密信息,而sdcard/Android 下放可以公开的缓存数据。
至于直接在sdcard下随便建文件夹的
就是开发人员素质低 或者 产品用耍流氓的方式筛选用户
处理方式:
卸载+一星
/*********************************************************************/
手机里面有两块空间,手机内部空间(/data/data/)和外部存储空间(/mnt/sdcard/ 或者直接/sdcard/)
与上面的代码基本一样,只是在new File(“/sdcard/文件名”),此时会报错,primission denied
Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
在清单文件中添加权限 android.primission.WRITE_EXTERNAL_STORAGE
4.0以前的系统读sd卡不需要权限,有很大的安全隐患,4.0以后的有权限,在设置里面开发者选项,对sd卡进行读写保护。添加权限 android.primission.READ_EXTERNAL_STORAGE
判断sd卡是否存在调用Evevironment.getExternalStorageState(),得到结果与Environment.MEDIA_MOUNTED比较,sd卡挂载,Environment.getExternalStorageDirectory()可以得到sd卡根路径
业务类修改:
package com.tsh.savefile.service; import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map; import android.content.Context;
import android.os.Environment;
import android.widget.Toast; public class LoginService {
/**
* 保存用户名和方法的业务方法
* @param context 上下文
* @param username 用户名
* @param password 方法
* @return
*/
public static boolean saveUserInfo(Context context,String username,String password){
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Toast.makeText(context, "sd卡不可用", Toast.LENGTH_SHORT).show();
return false;
}
File file=new File(Environment.getExternalStorageDirectory(),"/info1.txt");
try {
FileOutputStream fos=new FileOutputStream(file);
String info=username+"##"+password;
fos.write(info.getBytes());
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} }
/**
* 读取
* @return
*/
public static Map<String,String> getSavedUserInfo(Context context){
File file=new File(Environment.getExternalStorageDirectory(),"/info1.txt");
try {
FileInputStream fis=new FileInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
String[] res=br.readLine().split("##");
Map<String, String> map=new HashMap<String,String>();
map.put("username", res[0]);
map.put("password", res[1]);
return map;
} catch (Exception e) {
e.printStackTrace();
return null;
} }
}
[android] 保存文件到SD卡的更多相关文章
- android保存文件到SD卡中
想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- android 写文件到sd卡问题小记
android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...
- Android下载文件到SD卡
HttpURLConnection 上传方式: 尝试理解这两种流的区别: InputStreamReader 的读取方式: //创建一个URL对象 URL url = new URL(urlStrin ...
- Android(java)学习笔记182:保存数据到SD卡 (附加:保存数据到内存)
1. 如果我们要想读写数据到SD卡中,首先必须知道SD的路径: File file = new File(Environment.getExternalStorageDirectory()," ...
- Android(java)学习笔记125:保存数据到SD卡 (附加:保存数据到内存)
1. 如果我们要想读写数据到SD卡中,首先必须知道SD的路径: File file = new File(Environment.getExternalStorageDirectory()," ...
- android之写文件到sd卡
1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- Android入门开发之SD卡读写操作(转)
SD卡的读写是我们在开发android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String sdCardRoot = Environment.getE ...
- android复制数据库到SD卡(网上搜集,未经验证)
android中使用sqlite.复制assets下的数据库到SD卡.支持大于1M的文件 如果使用SD卡,需要在AndroidManifest.xml中设置权限 <uses-permission ...
随机推荐
- MacOS使用Charles抓去HTTPS数据
1.安装Charles,示例版本为4.0.1 2.Proxy->Proxy Settings 3.MacOS->Terminal->ifconfig 获取本机IP地址,如192.16 ...
- NAT技术与代理服务器
1.什么是NAT技术? NAT(network address Translation):网络地址转换 使用端口号的NAT:网络地址与端口号转换 2.理解下图就可以完全知道NAT技术的原理: 3.什么 ...
- 背水一战 Windows 10 (95) - 选取器: 自定义文件保存选取器
[源码下载] 背水一战 Windows 10 (95) - 选取器: 自定义文件保存选取器 作者:webabcd 介绍背水一战 Windows 10 之 选取器 自定义文件保存选取器 示例1.演示如何 ...
- mysql兼容emoji表情存取
emoji介绍 Emoji (絵文字,词义来自日语えもじ,e-moji,moji在日语中的含义是字符)是一套起源于日本的12x12像素表情符号,由栗田穣崇(Shigetaka Kurit)创作,最早在 ...
- Eclipse常用20个快捷键
Eclipse常用20个快捷键 1. Ctrl+F : 本文查找Find与替换Replace 2. Ctrl+H : 全局搜索,可按照文件类型搜索 3. Ctrl+1 : 快速修复,能快速的显示光标所 ...
- Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件
版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/7457321.html 一.AudioRecord API详解 AudioRecord是Android系统提 ...
- 第41节:Java当中的类集框架
Java当中的类集框架 类集框架,那么什么是类集框架,集合的种类有哪些,类集框架的基础结构. 类集框架是一组类和接口的集合,位于java.util包当中,是用来用户存储和管理对象的,在这个类集合框架中 ...
- 《深入浅出nodejs》读书笔记(2)
概述 本来是想着学学node.js试试的,后来发现node.js才是真正的js啊,它里面用到了很多我们平时没用过的js特性,而且还非常优雅,比如它里面的异步编程思想,总之,<深入浅出node.j ...
- Static了解和复习继承。
Static了解 static加在局部变量的前面改变其存储类型使之成为静态局部变量,会延长它的生存周期,但是不会改变其作用域. 静态成员是属于类的,而不是属于某个对象的.即便没有任何一个实例,类的静态 ...
- 插头dp初探
问题描述 插头dp用于解决一类可基于图连通性递推的问题.用插头来表示轮廓线上的连通性,然后根据连通性与下一位结合讨论进行转移. 表示连通性的方法 与字符串循环最小表示不同,这种方法用于给轮廓线上的联通 ...