本节分享如何将自己的文件存到内存卡里面。
如何将自己的内存卡的已用大小和总大小取出来
sd卡的读写过程
第一步:判断你是不是给手机装了sd卡,
//在这一步对于,现在的高版本api手机好像不是那么适用,
//这是在试过oppo 和 coolpad 和魅族手机试出来的,
//可能是代码问题,或者软件问题,未解决,
第二步:判断成功了之后调用方法来获得这个sd卡的位置信息
//我的真机调试过程获得的是我的手机内部储存的信息
第三步:使用IO读写文件
//要打开sd卡的创建删除文件的权限
//打开xiangsd卡中写入文件的权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在使用io的知识
创建删除文件,以及对文件内容的更改
我是用我的coolpad做的实验,为API18
在模拟机调试时可以获得sd卡的位置
//正常的自己创建路径找到内存卡中的文件夹是可以的,这是我的coolpad的内存卡的地址
//这是我的自己用手机查看的内存卡目录
File file = new File("/storage/sdcard1/liyan.txt")
//这是内部储存的地址
//虽然下面这一个是应该SD卡的位置,但真机调试时就是内部储存地址
String sdpath = Environment.getExternalStorageDirectory().getPath();
File file = new File("/storage/emulated/0/liyan.txt")
//这一行就是说,在storage目录下sdcard1目录下,创建一个liyan.txt
//经试验成功,另外想写什么地址都可以成功找到,前提是地址有效
//然后使用java中的io知识
注意,但是我们开发的环境绝对不是面向一种手机的
但是不同的手机的sd卡的位置又不尽相同所以,
我们就需要用方法获取到一个sd卡的位置
代码如下
b_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//开始点击方法
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断是不是可用的sd卡
try {
//这是字节流要写进去的字符串
String s = "nihao**shijie";
//这是我的coolpad的内存卡的地址
//File file = new File("/storage/sdcard1/liyan.txt");
//这是内部储存的地址
//File file = new File("/storage/emulated/0/liyan.txt");
//这是我们按理说取到的sd卡的路径
String sdpath = Environment.getExternalStorageDirectory().getPath();
//英文意思为获取外部储存目录
//这个也是按理说取到sd卡的路径,不过最后加了一个斜杠和文件的名字,
//这是两种是实现方法
String location = Environment.getExternalStorageDirectory().toString()+"/"+"tao.txt";
//创建一个文件
File file = new File(location);
//创建一个文件,先是地址再是文件名字
File file_2 = new File(sdpath,"huishou.txt");
//实例化
FileOutputStream fos = new FileOutputStream(file);
FileOutputStream fos_2 = new FileOutputStream(file_2);
//文件写入
fos.write(s.getBytes());
fos_2.write(s.getBytes());
//文件关闭
fos.close();
fos_2.close();
//总结一下,这里按照道理来讲应该是将文件保存到我们的sd卡下,
//但是实际上保存的是,我手机目录之下,
//为了确定我是不是写错了,我关闭了我的sd卡读写以及修改权限,
//这时候就写不进去了,
//这种现象表明应该是我的手机出现了问题,
//!!!!!!!!!!!!!!经过调试在电脑上的虚拟机
//哑巴里,果然是这样
//吐司显示一下能够检测到了
Toast.makeText(MainActivity.this, "储存卡已经检测到了", Toast.LENGTH_SHORT).show();
//说明一下存在的位置
dm.setText("huishou.txt储存的地址是" + sdpath + "\n" + "tao储存的地址是" + location);
//Toast.makeText(MainActivity.this, "储存卡可用"+sdpath+",已经储存到"+location, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "抛出异常了,有可能是mainfest权限没有打开", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}else {
Toast.makeText(MainActivity.this, "错误没有检测到sd卡", Toast.LENGTH_SHORT).show();
}
}
});
获取sd卡信息
//这些都是在oncreate哪个函数里面
//找到两个文本域用来显示
final TextView tv_total = (TextView) findViewById(R.id.tv_1);
final TextView tv_useable = (TextView) findViewById(R.id.tv_2);
File file = Environment.getExternalStorageDirectory();//获取外部储存目录
final long total = file.getTotalSpace();
final long useable = file.getUsableSpace();
final String ok = android.text.format.Formatter.formatFileSize(this, total);
final String ok_2 = android.text.format.Formatter.formatFileSize(this,useable);
//在Java中,final的作用主要有一下三个方面~
// 第一,被final修饰的类不能被继承。
// 第二,被final修饰的方法不能被重写。
// 第三,被final修饰的变量不能被重新赋值。
Button b_gett = (Button) findViewById(R.id.b_get);
b_gett.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv_total.setText(ok);
tv_useable.setText(ok_2);
}
});
上面的formatter是,这个包里的不要搞错,老版本的eclipse这个不同
从图上看出:总大小2.10GB,还剩下0.94GB