Android中使用正确参数构建StatFs对象

java.lang.IllegalArgumentException: Invalid path解决方案 功能:读取外置存储的信息。 现象:在反弹插拔TF卡之后,会弹出强制关闭 概率:反复插拔TF卡会出现,在一定时间内多次插拔,可以达到必现 Logcat: E/AndroidRuntime( 2920): FATAL EXCEPTION: main E/AndroidRuntime( 2920): Process: com.borqs.factorytest, PID: 2920 E/An 阅读详情
Android 2.3.3           
Eclipse Version: 3.7.0           
LogCat   

LogCat 报错信息:

02-14 11:54:12.834: ERROR/(2525): statfs htc failed, errno: 2
02-14 11:54:12.844: WARN/System.err(2525): java.lang.IllegalArgumentException
02-14 11:54:12.853: WARN/System.err(2525): at android.os.StatFs.native_setup(Native Method)
02-14 11:54:12.873: WARN/System.err(2525): at android.os.StatFs.(StatFs.java:32)
02-14 11:54:12.873: WARN/System.err(2525): at com.taobao.util.Devices.getBlock(Devices.java:161)
02-14 11:54:12.884: WARN/System.err(2525): at com.taobao.util.Devices.getUsedRatio(Devices.java:199)
02-14 11:54:12.884: WARN/System.err(2525): at com.taobao.htc.Check.checkSDBlock(Check.java:271)
02-14 11:54:12.884: WARN/System.err(2525): at com.taobao.htc.Check.run(Check.java:332)
02-14 11:54:12.895: WARN/System.err(2525): at java.lang.Thread.run(Thread.java:1019)

发生错误原因分析:
分析发生错误部分代码,发现在构建StatFs对象时出错

			sdpath = "htc/";
			StatFs sf = new StatFs(sdpath);

StatFs用于对系统的存储容量进行检测。报错是因为构建StatFs对象时使用了非法参数。"htc/"不是一个合法有效的参数,合法参数应该形如“"/mnt/sdcard”。

 

解决办法:

使用默认的路径及名称是最好的方法

			sdpath = Environment.getExternalStorageDirectory().getPath();// sdpath ="/mnt/sdcard"
			//sdpath = Environment.getExternalStorageDirectory().getName();// sdpath ="sdcard"
			StatFs sf = new StatFs(sdpath);

如果一定需要自定义路径作为参数,也应使用类似下列格式的有效自定义路径

			sdpath = "/mnt/sdcard/htc/";
			sdpath = "/sdcard/htc/";
			sdpath = "sdcard/htc/";


以合法的路径及名称作为参数,一般类似以"/mnt/sdcard" 或"sdcard/"开头的路径都是正确的。具体情况需要在编程中测试一下。

Android外置存储路径无效异常分析与权限修复指南 本文深入分析了Android应用在访问外置存储(如TF卡)时遇到的`java.lang.IllegalArgumentException: Invalid path`异常的根本原因,指出其源于存储卷的动态状态变化(如插拔)导致的竞态条件。文章提供了从权限声明、动态申请到使用系统API正确获取路径的完整解决方案,并重点阐述了如何编写防御性代码(包括异常捕获、状态监听和重试机制)来构建健壮的存储信息查询功能,确保应用在面对存储设备状态突变时依然稳定。 阅读详情

相关推荐

Android 14.0 kenel中修改rom系统内部存储的大小

在14.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出相关的修改,来实现功能

安卓兼职framework和app工程师的博客 448

Android:StatFs类 获取系统/sdcard存储空间信息

转自https://www.cnblogs.com/zhangs1986/p/3251171.html StatFs statFs = new StatFs(sdcardDir.getPath()); long availableSize = statFs.getAvailableBytes(); long s1=statFs.getBlockCountLong(); long s2=...

hnlgzb的专栏 1031

Android 10.0 kenel中修改rom系统内部存储的大小

在10.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出修改

安卓兼职framework和app工程师的博客 1403

Android系统容量检测 —— Environment 和StatFs

 当下载或安装一个文件之前,往往会比较关心当前系统内存和SD卡上的剩余容量。在做文件拷贝,移动操作时,检测目标目录的空间大小也是必须的。   Android系统提供了Environment 和StatFs两个类,来实现对容量的检测。下面是一些相关的方法。   Environment:     getDataDirectory(): 获取应用存储空间文件对象。     getExternal...

weixin_30572613的博客 297

Android 12.0 kenel中修改rom系统内部存储的大小

在12.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出相关的修改,来实现功能

安卓兼职framework和app工程师的博客 1678

Android 13.0 kenel中修改rom系统内部存储的大小

在13.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出相关的修改,来实现功能

安卓兼职framework和app工程师的博客 857

StatFs类 获取系统/sdcard存储空间信息

1. 判断 SDCard 是否存在,并且是否具有可读写权限       staticpublicboolean isExternalStorageAvailable() {      return Environment.getExternalStorageState().equals(              Environment.MEDIA_MOUNTED);

njtuzhang的专栏 807

Android 9.0 kenel中修改rom系统内部存储的大小

在9.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小做修改,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出修改

安卓兼职framework和app工程师的博客 1163

Android学习之路之数据存储(一)

Android有五种主要存储方式的用法,包括SD卡文件共享参数SharedPreferences数据库SQLiteApp的全局内存Application与内容提供器ContentProvider下面,我们将要讲解一下SD卡文件,在讲解SD卡文件之间,我们先来看看Android的存储目录。

捌椒的博客 932

Android 11.0 kenel中修改rom系统内部存储的大小

在11.0的系统rom产品开发定制中,在对一些产品硬件设备配置要求搞的需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出修改

安卓兼职framework和app工程师的博客 1802

基于单片机直流电机调速控制系统设计

*单片机设计介绍,基于单片机直流电机调速控制系统设计。

2201_75940997的博客 2779

android statfs可用空间小于实际可以用,android 使用statfs获得文件路径可用空间大小的方法...

1. 参考下面链接学习statfs()函数的用法:http://baike.baidu.com/view/4523779.htmstatfs函数使用说明功能描述:查询文件系统相关的信息。用法:#include /* 或者 */int statfs(const char *path, struct statfs *buf);int fstatfs(int fd, struct statfs *buf...

weixin_36318586的博客 755

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?

对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。

qq_63315166的博客 1300

存储容量检测 注意构建StatFs对象的参数合法性

Android 2.3.3 Eclipse Version: 3.7.0 LogCat LogCat 报错信息: 02-14 10:24:27.134: ERROR/(4355): statfs nokia failed, errno: 2 02-14 10:24:27.144: WARN/System.err(4355): java.lang.IllegalArgumentExcept...

DebugLog的专栏 220

STM32实战:滑模观测器与PLL锁相环融合的FOC无感控制精解

本文深入解析了STM32平台下结合滑模观测器(SMO)与PLL锁相环的无感FOC控制技术。通过实战案例详细介绍了PLL锁相环在消除SMO高频抖振、提升角度跟踪精度方面的关键作用,并分享了工程调参技巧、C语言实现细节及系统联调方法,为电机控制开发者提供了一套完整的解决方案。

weixin_30838873的博客 188

Cadence SpectreRF仿真避坑指南:PSS和Pnoise设置详解(附实战案例)

本文详细解析了Cadence SpectreRF中PSS(周期稳态分析)和Pnoise(周期噪声分析)的关键设置技巧,帮助模拟IC设计工程师避开常见仿真陷阱。通过实战案例分享,涵盖引擎选择、Beat Frequency计算、噪声类型配置等核心参数优化策略,提升仿真精度与效率。特别针对开关电容电路和振荡器等复杂场景提供专业解决方案。

weixin_42613501的博客 601

android 使用statfs获得文件路径可用空间大小的方法

1. 参考下面链接学习statfs()函数的用法: http://baike.baidu.com/view/4523779.htm   statfs函数使用说明   功能描述:   查询文件系统相关的信息。   用法:   #include /* 或者 */   int statfs(const char *path, struct statfs

4716

ADC电路项目1——10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8

包括详细仿真文档,原理介绍,完整电路图,仿真参数已设好,可直接使用,在自己的电脑上就可以运行仿真。本设计采用 smic18mmrf CMOS 工艺,使用栅压自举电路的采样开关,Vcm-based 开关。电容开关控制电路,10 位 DFF,最后用 10 位理想 DAC 模块将数字码转换为 10 进制量进。时序上级板采样的 DAC 电容阵列,两级动态比较器,比较器异步时钟,SAR 动态逻辑,DAC。10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8。

qq_48407979的博客 814

statfs获得硬盘使用情况 模拟linux命令 df

说明:本文以主要为转载内容,同时加入了我在使用过程中遇到问题对其的修正!!!!!!!!! 先说statfs结构:#include     /* 或者 */ int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf); 参数:   path: 位于需要查询信息的文

JINKAI 2万+

Jenkins离线安装保姆级教程:从下载.war包到SVN+Maven项目一键部署(附避坑脚本)

本文详细介绍了Jenkins离线安装的全流程,包括.war包下载、SVN+Maven项目配置及自动化部署。特别针对内网环境提供解决方案,涵盖插件管理、开发工具链配置、构建触发器和SSH部署等关键步骤,帮助企业在网络隔离环境下实现高效持续集成。

weixin_30096975的博客 373

知识推理——TransE(知识表示、知识嵌入)

知识图谱嵌入/表示方法 TransE

missyoudaisy的博客 1831

Android利用StatFs查看SDCard物理信息

package cn.sohu.com; //1 查看SDCard相关信息的主要使用到的是StatFs类,没有其余难点 //2 从SDCard中读取txt文件要注意 // 第一:txt文件应该要按照UTF-8保存的.因为默认的是ANSI编码的!!!!! // 第二:不能使用openFileInput(filePath)方法获取输入流.因为此方法的参数要求不能含有路径分隔符. //

谷哥的小弟 1259

超详细!Linux 服务器 6 大核心性能测试(附自动脚本 + 结果分析秘籍)---Linux 服务器性能测试文档

本文档旨在提供 Linux 服务器的 CPU、内存和磁盘性能测试方案,包括详细的测试大纲、操作步骤以及一键化测试脚本,帮助管理员快速评估服务器性能状况。通过以上测试方案,可以全面评估 Linux 服务器的 CPU、内存和磁盘性能,为系统优化、容量规划和问题排查提供重要参考依据。使用 sysbench 进行 CPU 基准测试。使用 sysbench 测试内存读写性能。使用 fio 工具进行更全面的磁盘测试。使用 dd 命令测试磁盘顺序读写性能。使用 dd 命令测试内存读写速度。记录磁盘 IO 性能。

jundao1997的专栏 380

android 获取内部存储大小,Android中StatFs获取系统/sdcard存储(剩余空间)大小

package com.orgcent.util;import java.io.File;import android.os.Environment;import android.os.StatFs;public class MemoryStatus {static final int ERROR = -1;/*** 外部存储是否可用* @return*/static public boolean...

weixin_33252145的博客 868

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

linux获取U盘可用空间大小,U盘大小——statfs的使用

#include /* 或者 */ int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf); 参数:    path: 位于需要查询信息的文件系统的文件路径名(不是设备名,是挂载点名称)。      fd: 位于需要查询信息的文件系统的文件描述词。

烟花易冷 7778

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: SQLite抛出错误“未关闭游标及数据库对象”特殊原因一例
下一篇: 存储容量检测 注意构建StatFs对象的参数合法性
DebugLog
博客等级 码龄15年 10粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值