本文主要介绍如何写数据到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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架