Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?
本文主要介绍如何写数据到sd卡,这里主要到的技术是Environment中的方法.
1.
2.实现代码:
/datasave/src/com/amos/datasave/savePasswordService.java
//写数据到sdcard
public void savePasswordToSDCard(String name, String password) {
// android 2.1 /sdcard/xx.txt
// android 2.2 /mnt/sdcard/xx.txt
// self_define /excard/xx.txt // File externalStorageDirectory = Environment.getExternalStorageDirectory();
// String path = externalStorageDirectory.getPath();
// System.out.println("path:" + path); // 要存储的内容
String content = name + ":" + password; Log.d(tag, "检验sdcard是否可用?");
//判断sdcard是否存在?
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Log.d(tag, "sdcard不可用!");
Toast.makeText(context, "没有找到SDCard!", Toast.LENGTH_LONG);
return ;
}; try {
// File file = new File("/sdcard/qqpassword.txt");
// File file = new File(path + "/qqpassword2.txt");
File file = new File(Environment.getExternalStorageDirectory(), "/qqpassword2.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(content.getBytes());
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
} }
在android2.1及以前版本中,其sdcard目录在根目录,2.2,2.3以后其sdcard目录就变成了/mnt/sdcard了,以及一些厂商自定义的android系统,可能也会把sdcard的名称改的各不相同.这里如果还是用绝对路径,那么程序的兼容性将会大大降低.这里主要用到了Enviroment类.
android.os.Environment
其主要方法有:
- getRootDirectory()---->/ 获取根目录
- getDataDirectory()---->/data 获取data目录
- getExternalStorageDirectory()--->/sdcard 获取sd卡目录
- getDownloadCacheDirectory()--->/cache 获取下载文件的缓存目录
- getExternalStorageState--->sdcard的状态,removed,unmounted,checking,nofs,mounted,mounted_ro,shared,unmountable,bad_removal
完整的savePasswordService.java文件为:
package com.amos.datasave; import java.io.File;
import java.io.FileOutputStream; import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast; @SuppressLint("WorldWriteableFiles")
public class savePasswordService {
private Context context; private String tag = "savePasswordService"; public savePasswordService(Context context) {
this.context = context;
} public void savePasswordToFile(String name, String password) {
// 这里设置文件的权限
String content = name + ":" + password;
Log.d(tag, "设置文件的读写权限");
try {
FileOutputStream fileOutput = context.openFileOutput("LoginTestConfig.txt", Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
fileOutput.write(content.getBytes());
fileOutput.flush();
fileOutput.close();
} catch (Exception e) {
Log.d(tag, "设置文件的读写权限失败!");
e.printStackTrace();
}
}
//写数据到sdcard
public void savePasswordToSDCard(String name, String password) {
// android 2.1 /sdcard/xx.txt
// android 2.2 /mnt/sdcard/xx.txt
// self_define /excard/xx.txt // File externalStorageDirectory = Environment.getExternalStorageDirectory();
// String path = externalStorageDirectory.getPath();
// System.out.println("path:" + path); // 要存储的内容
String content = name + ":" + password; Log.d(tag, "检验sdcard是否可用?");
//判断sdcard是否存在?
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Log.d(tag, "sdcard不可用!");
Toast.makeText(context, "没有找到SDCard!", Toast.LENGTH_LONG);
return ;
}; try {
// File file = new File("/sdcard/qqpassword.txt");
// File file = new File(path + "/qqpassword2.txt");
File file = new File(Environment.getExternalStorageDirectory(), "/qqpassword2.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(content.getBytes());
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
} } }
如何获取sdcard的大小?
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getPath());
long blockSize = statFs.getBlockSize();
long blockCount = statFs.getBlockCount();
long sdCardSize = blockSize*blockCount;
Log.d(tag,""+sdCardSize );
这里使用的是Environment中的方法获取到sdcard的路径,然后将其路径通过StatFs类,该类主要获取指定文件路径下的文件信息(filesystem info).
获取其块大小,块数量.
Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?的更多相关文章
- Android开发学习之路--数据持久化之初体验
上班第一天,虽然工作上处于酱油模式,但是学习上依旧不能拉下,接着学习android开发吧,这里学习数据持久化的 知识. 其实数据持久化就是数据可以保存起来,一般我们保存数据都是以文件,或者数据库的形式 ...
- Android开发学习之SQLite数据存取浅析
一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习路线图
Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- Android开发学习之LauncherActivity开发启动的列表
Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果: 建立主Activity:OtherActivity.java [jav ...
- 最实用的Android开发学习路线分享
Android开发学习路线分享.Android发展主导移动互联发展进程,在热门行业来说,Android开发堪称火爆,但是,虽然Android有着自身种种优势,但对开发者的专业性要求也是极高,这种要求随 ...
- Android开发学习必备的java知识
Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...
- Android开发学习之路--Android Studio cmake编译ffmpeg
最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...
随机推荐
- EF初级入门 (一对多、多对多)
1.创建新项目并引入Entity Framework 然后就可以开始使用EF了 开始使用一对多 Users 用户类,UserDetail用户详情类:一个用户对应多个详情(仅用于测试) public c ...
- mysql 连接空闲超8小时自动断开连接问题(linux)
在mysql配置文件里添加wait_timeout和interactive_timeout两个值 [mysqld] wait_timeout= interactive_timeout= 超时时间,10 ...
- clipboard_monitor_in_win7
添加监听 AddClipboardFormatListener(this.Handle); 移除 RemoveClipboardFormatListener(this.Handle); #region ...
- 解决linux 无法下载 oracle 官网 java的 安装包
wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-co ...
- PLC M8000 M8001 M8002 M8003
- 6.openssl rsautl和openssl pkeyutl
rsautl是rsa的工具,相当于rsa.dgst的部分功能集合.可用于签名.验证.加密和解密文件.非对称密钥的密钥是随机生成的,因此不需要也无法指定salt参与加密. pkeyutl是非对称加密的通 ...
- 性能测试常用Oracle语句
性能测试常用Oracle语句 显示数据库当前的连接数 select count(*) from v$process; 显示数据库最大连接数: select value from v$parameter ...
- wamp 配置遇到的问题
/* 最近开发部署更换到国内的服务器,想来想去还是更换为wamp套件. 但是由于下的版本的都不太适合. 外网一直显示拒绝.排查问题之后 写个笔记做个记录 */ wamp You don't have ...
- cookie 和session 的区别
假如我填好了淘宝的用户名密码,点击登录,浏览器客户端像服务器端发送请求,这时服务器端看这个用户是第一次登陆,session会让客户端这个浏览器生成个cookie,并给cookie一个session i ...
- http://bbs.ednchina.com/BLOG_345002072_2001308.HTM
http://bbs.ednchina.com/BLOG_345002072_2001308.HTM