使用sdcard进行数据存取

本文介绍如何在Android设备上创建及操作SD卡文件,包括通过命令行创建SD卡映像、在应用中请求必要的权限以及检查SD卡状态和进行文件读写操作的方法。

在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:

mksdcard2048M D:\AndroidTool\sdcard.img

在程序中访问SDCard,你需要申请访问SDCard的权限。

在AndroidManifest.xml中加入访问SDCard的权限如下:

<!--在SDCard中创建与删除文件权限-->

<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!--往SDCard写入数据权限 -->

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。

注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

       File sdCardDir =Environment.getExternalStorageDirectory();//获取SDCard目录

       File saveFile =new File(sdCardDir, “itcast.txt”);

FileOutputStreamoutStream = new FileOutputStream(saveFile);

outStream.write("xxxx".getBytes());

outStream.close();

}

Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。

Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写:

FilesdCardDir = new File("/mnt/sdcard"); //获取SDCard目录

FilesaveFile = new File(sdCardDir, "xxx.txt");

//上面两句代码可以合成一句: File saveFile = new File("/mnt/sdcard/xxx.txt");

FileOutputStreamoutStream = new FileOutputStream(saveFile);

outStream.write("xxxtest".getBytes());

outStream.close();


### STM32 SD卡数据读写教程 #### 准备工作 为了成功完成STM32上的SD卡读写操作,需准备好如下材料[^1]: - 支持SD卡接口的STM32开发板(如STM32F4 Discovery) - FAT32格式化的SD卡 - TF卡转接模块以便于物理连接至开发板 - 开发工具链:推荐使用Keil MDK-ARM或STM32CubeIDE - 掌握基础的STM32 GPIO和SPI通信原理 #### 初始化配置 在开始编写具体的应用程序前,要先设置好硬件参数并初始化必要的外设。这通常涉及到配置SPI总线以及分配相应的GPIO引脚给SD卡控制器。 ```c // 配置SPI模式下的SD卡初始化函数 void SDCard_Init(void){ // SPI初始化代码... } ``` #### 编写读写功能 对于实际的数据传输过程,则依赖预先定义好的API来执行具体的命令序列。下面给出了一组简化版的操作示范: ```c #include "stm32f4xx_hal.h" // 定义SD卡读写的辅助宏定义 #define BUFFER_SIZE 512 /* 单次最大可处理字节数 */ #define SECTOR_START_ADDR 0 /* 起始扇区地址 */ /** * @brief 向指定位置写入缓冲区内一定长度的数据流 * * @param buf 待发送的数据指针 * @param sector 扇区号 * @param cnt 连续写入的数量(单位:扇区) */ HAL_StatusTypeDef SDCard_WriteData(uint8_t* buf, uint32_t sector, uint32_t cnt) { HAL_StatusTypeDef status; while (cnt--) { status = HAL_SD_WriteBlocks(&hsd1, buf + (sector++) * BUFFER_SIZE, BUFFER_SIZE / sizeof(uint32_t), 100); if(status != HAL_OK) break; } return status; } /** * @brief 从指定位置读取连续多个扇区内的数据到内存中 * * @param buf 存储接收数据的目标数组首地址 * @param sector 开始读取的第一个扇区编号 * @param cnt 总共需要读取多少个完整的扇区 */ HAL_StatusTypeDef SDCard_ReadData(uint8_t* buf, uint32_t sector, uint32_t cnt) { HAL_StatusTypeDef status; while(cnt--){ status = HAL_SD_ReadBlocks(&hsd1,buf+(sector++)*BUFFER_SIZE,BUFFER_SIZE/sizeof(uint32_t),100); if(status!=HAL_OK)break; } return status; } ``` 上述代码片段展示了基于HAL库实现的简单文件系统层面上的读写方法[^2]。通过调用`HAL_SD_WriteBlocks()` 和 `HAL_SD_ReadBlocks()`, 可以方便地向SD卡内存储区域进行块级别的访问控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值