[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 ...
随机推荐
- day23_雷神_git
git 版本控制工具 下载: https://git-scm.com/ git clone: 是用来拉代码的,git pull是更新当前分支的代码,拿到最新的代码,git pull是获取已经存在的仓库 ...
- Snapshot Types
Volume managers Some Unix systems have snapshot-capable logical volume managers. These implement cop ...
- win10个人助理conrtana软件能否支持用户反馈、后续优化
上网查找了一下,win10的个人助理不支持用户反馈.这些反馈都是用户通过别的途径来发表反馈的信息,这个缺陷让用户不是特别满意,因为反馈信息不再那么简答,变得越来越繁琐.有些人还会担心自己反馈的问题会不 ...
- sqlserver使用存储过程跟踪SQL
为跟踪EF生成的SQL /1.添加存储过程/ USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_ ...
- CSS3圆角详解第一辑
有很多人都知道圆角怎么写,加一个border-radius就可以,但是对于用圆角的一些细节却并不是很清楚,那么我们今天就来聊一聊这个圆角.CSS3是样式表(style sheet)语言的最新版本,它的 ...
- Go语言复制文件
需要使用io包的Copy方法 package main import ( "fmt" "io" "os" ) //自己编写一个函数,接收两个 ...
- 机器学习入门02 - 深入了解 (Descending into ML)
原文链接:https://developers.google.com/machine-learning/crash-course/descending-into-ml/ 线性回归是一种找到最适合一组点 ...
- spring boot -整合Ehcahe
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- Python编程Day3—基本运算符、数据类型
一.基本运算符 1.算数运算 print(10/3) print(10//3) print(10%3) print(10**3) 2.比较运算 print(10==10) print(10!=10) ...
- kindeditor扩展粘贴截图功能&修改图片上传路径并通过webapi上传图片到图片服务器
前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...