博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?...
阅读量:6469 次
发布时间:2019-06-23

本文共 4446 字,大约阅读时间需要 14 分钟。

本文主要介绍如何写数据到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();        }    }}
View Code

 如何获取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).

获取其块大小,块数量.

 

转载地址:http://vedko.baihongyu.com/

你可能感兴趣的文章
C#反射---属性
查看>>
服务器常用的状态码及其对应的含义如下
查看>>
zoom和transform:scale的区别
查看>>
幸福框架:可扩展的、动态的、万能的 编号生成器
查看>>
黄聪:PHP 防护XSS,SQL,代码执行,文件包含等多种高危漏洞
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
HDU 1402 A * B Problem Plus FFT
查看>>
[CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数
查看>>
Security updates and resources
查看>>
深入理解JavaScript系列(25):设计模式之单例模式
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>
《你有多少问题要请示》精华集粹
查看>>
深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
查看>>
leveldb学习:DBimpl
查看>>