android 读写SD卡文件
Android正确获取SD卡目录及使用SD卡目录
SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作的一件事,那么在Android开发中,我们如何能获取SD卡的内存容量呢?
1、判断手机是否插入SD卡
- if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
- doSth();
- //....
- }
2、然后才能操作SD卡
- File path = Environment.getExternalStorageDirectory();
这个PATH就是你要操作的路径,当然你在操作的时候最好对SD卡的使用做个检测判断,当SD卡有存储空间时才可以进行存储操作。
- StatFs statfs = new StatFs(path.getPath());
获取BLOCK的SIZE
- long blocSize = statfs.getBlockSize();
获取BLOCK数量
- long totalBlocks = statfs.getBlockCount();
空闲的Block的数量
- long availaBlock = statfs.getAvailableBlocks();
最后别忘了,要获取SD卡上面的信息,必须先对SD卡有访问的权限,因此最后一件事就是需要添加访问扩展设备的权限,更多权限请访问:Android 应用程序开发权限一览表。
- <uses-permission
- android:name="android.permission.WRITE_EXTERNAL_STORAGE">
- </uses-permission>
2、获得SD卡目录
1
|
File sdCardDir = Environment.getExternalStorageDirectory(); //获取SDCard目录
|
3、写入文件
01
|
File f = Environment.getExternalStorageDirectory(); //获取SD卡目录
|
02
|
File fileDir = new File(f, "test.txt" );
|
03
|
FileOutputStream os = new FileOutputStream(fileDir);
|
04
|
try {
|
05
|
os.write(text.getBytes());
|
06
|
os.close();
|
07
|
showToast( "保存到SD卡中" );
|
08
|
} catch (IOException e) {
|
09
|
// TODO Auto-generated catch block
|
10
|
e.printStackTrace();
|
11
|
}
|
4、读取文件
01
|
File f = Environment.getExternalStorageDirectory(); //获取SD卡目录
|
02
|
File fileDir = new File(f, "test.txt" );
|
03
|
is = new FileInputStream(fileDir);
|
04
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
05
|
byte [] array = new byte [ 1024 ];
|
06
|
int len = - 1 ;
|
07
|
while ( (len = is.read(array)) != - 1 ){
|
08
|
bos.write(array, 0 ,len);
|
09
|
}
|
10
|
bos.close();
|
11
|
is.close();
|
12
|
return bos.toString();
|
5、读取权限
在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
6、其它方法
getCacheDir()方法用于获取/data/data/<package name>/cache目录。
getFilesDir()方法用于获取/data/data/<package name>/files目录。
其实就是普通的文件操作,不过还是有些地方需要注意。比如:
1.加入sdcard操作权限;
2.确认sdcard的存在;
3.不能直接在非sdcard的根目录创建文件,而是需要先创建目录,再创建文件;
在AndroidManifest.xml添加sdcard操作权限
<!-- sdcard权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
变量声明:
private final static String PATH = "/sdcard/digu";
private final static String FILENAME = "/notes.txt";
向sdcard写文件
/**
* 写文件
*/
private void onWrite() {
try {
Log.d(LOG_TAG, "Start Write");
//1.判断是否存在sdcard
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
//目录
File path = new File(PATH);
//文件
File f = new File(PATH + FILENAME);
if(!path.exists()){
//2.创建目录,可以在应用启动的时候创建
path.mkdirs();
}
if (!f.exists()) {
//3.创建文件
f.createNewFile();
}
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream(f));
//4.写文件,从EditView获得文本值
osw.write(editor.getText().toString());
osw.close();
}
} catch (Exception e) {
Log.d(LOG_TAG, "file create error");
}
}
接着我们在使用SDcard进行读写的时候 会用到Environment类下面的几个静态方法
1: getDataDirectory() 获取到Androi中的data数据目录
2:getDownloadCacheDirectory() 获取到下载的缓存目录
3:getExternalStorageDirectory() 获取到外部存储的目录 一般指SDcard
4:getExternalStorageState() 获取外部设置的当前状态 一般指SDcard,
5:getRootDirectory() 获取到Android Root路径
6:isExternalStorageEmulated() 返回Boolean值判断外部设置是否有效
7:isExternalStorageRemovable() 返回Boolean值,判断外部设置是否可以移除
【注】上面进行红色标记的方法,我们会常用
下面看实现SDCard进行文件读写操作的Demo:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class SDcardActivity extends Activity {
private Button bt1, bt2;
private EditText et1, et2;
private static final String FILENAME = "temp_file.txt";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bt1 = (Button) this.findViewById(R.id.bt1);
bt2 = (Button) this.findViewById(R.id.bt2);
et1 = (EditText) this.findViewById(R.id.et1);
et2 = (EditText) this.findViewById(R.id.et2);
bt1.setOnClickListener( new MySetOnClickListener());
bt2.setOnClickListener( new MySetOnClickListener());
}
private class MySetOnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
File file = new File(Environment.getExternalStorageDirectory(),
FILENAME);
switch (v.getId()) {
case R.id.bt1: // 使用SDcard写操作
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(et1.getText().toString().getBytes());
fos.close();
Toast.makeText(SDcardActivity. this, "写入文件成功",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(SDcardActivity. this, "写入文件失败",
Toast.LENGTH_SHORT).show();
}
android 读写SD卡文件相关推荐
- android读写sd卡代码,android读写SD卡中的文件 demo
有时,我们需要将更大的文件保存下来,就不能用手机内置的存储空间,毕竟是有限的,所以将文件保存在SD卡中. 要读写SD卡,首先要知道手机上是否有SD卡,且是否可读写 String str = " ...
- Android读写SD卡
Android读写SD卡 0. 参考 解决各版本安卓读写SD卡的问题-java.io.IOException: Operation not permitted问题(兼容到android13) 1. 安 ...
- android 读写sd卡的权限设置
在Android中,要模拟SD卡,要首先使用adb的mksdcard命令来建立SD卡的镜像,如何建立,大家上网查一下吧,应该很容易找到,这里不说这个问题. 但是在应用程序执行起来以后,我们可以看到sd ...
- android sd卡写入,Android写入SD卡文件夹
Android写入SD卡文件夹 我正在使用以下代码从我的服务器下载一个文件,然后将其写入SD卡的根目录,所有这些都很好:package com.downloader;import java.io.Fi ...
- android 模拟器 sd卡文件 fileexport,linux下android模拟器的启动和SD卡的使用介绍.pdf...
主机配置主机配置 32 位 XP vbox 虚拟机 32 位 ubuntu10 04 android2 2 源码 JDK1 5 1 编译编译 android2 2 源码源码 编译环境准备好之后 在终端 ...
- android 模拟器 sd卡文件 fileexport,备份SQLite数据库文件到SD卡
所以我见过很多备份SQLite数据库文件到SD卡的例子,我已经得到这个在开发中的android模拟器上成功工作,但它不能按预期工作在电话本身.这是我不明白的奇怪部分.备份文件实际上是在SD卡上创建文件 ...
- android 打开SD卡文件夹,并获得选中文件的路径怎么实现?
============问题描述============ 如题,我想在我的程序中点击一个按钮,然后打开系统自带的文件管理器,选择文件后,返回选中文件的路径到我的程序中,类似于下面这个图的 然后我点击文 ...
- java media_unmount file_(20120801)android文件的读写SD卡总结
android的SD卡的文件读取操作 首先设置xml文件的权限,和单元测试的代码 package="com.wsl.file_txt" android:versionCode=&q ...
- android 数据持久化——读写SD卡中的内容
在前面讲的那三个方法:openFileOutput .openFileInput 虽然都能通过流对象OutputStream和InputStream可以处理任意文件中的数据,但与SharedPrefe ...
最新文章
- 摄像头标定GML Camera Calibration
- Github开源趋势榜Top 1:英伟达升级发布二代StyleGAN,效果更完美
- android程序在调试时出现了套接字异常“java.net.SocketException: Permission denied”该如何解决...
- 总线接口与计算机通信(五)CAN总线
- leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)
- mysql5.7.24怎么打开_mysql-5.7.24-winx64安装教程
- Git使用相关问题汇总
- EXPLAIN mysql性能调优
- matlab 2013a破解文件
- 什么是1号信令、7号信令和PRI信令?
- linux-glibc升级到2.15版本
- confirm() 中写html,confirm用法 Confirm……that……
- Android studio通过科大讯飞的SDK实现文字转语音功能
- 一种利用强核力和弱核力复制物质原子的仪器
- cola公司工资java_COLA - 整洁面向对象分层架构
- 家用千兆路由器排行榜前十名_求家用路由器排名前十名,有哪些比较推荐?
- 宝塔Linux面板安装命令脚本大全(Centos/Ubuntu/Debian/Fedora/Deepin)
- css多图标在一张图内如何正确显示它们
- Oracle与SQL Server在企业应用中的比较(转)
- 20201120翻译_disba基于Python的面波正演模拟程序包
热门文章
- el-table表格合计放在上面
- ssm毕设项目垃圾回收系统j16l0(java+VUE+Mybatis+Maven+Mysql+sprnig)
- OK6410 Linux DS18B20驱动
- 江西职业中学高三的三校生计算机考试,2019年江西省“三校生”对口升学考试高等职业学校高考语文试题及答案.pdf...
- php 3d animation,基于three.js的酷炫Canvas 3D线条动画特效
- 数据中台(四) 组织规划
- Oracle实现自增
- python操作excel及爬取美赛证书
- 史上最全的推广渠道(值得收藏)
- 哈佛图书馆的20条经典校训