android 获得SDCard信息
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <!-- 显示block的数量的标签控件 --> <TextView android:id="@+id/tv_TotalBlocks" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 显示block的大小的标签控件 --> <TextView android:id="@+id/tv_BlocSize" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 显示可用block的标签控件 --> <TextView android:id="@+id/tv_AvailaBlock" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 显示空block的标签控件 --> <TextView android:id="@+id/tv_FreeBlock" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 显示SDCard的总大小的标签控件 --> <TextView android:id="@+id/tv_SDTotalSize" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 显示SDCard的剩余大小的标签控件 --> <TextView android:id="@+id/tv_SDFreeSize" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
package com.example.yanlei.yl2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import java.io.File; public class MainActivity extends AppCompatActivity { private TextView mTvTotalBlocks; //SDCard上BLOCK总数 private TextView mTvBlocSize; //SDCard上每个block的SIZE private TextView mTvAvailaBlock; //可供程序使用的Block的数量 private TextView mTvFreeBlock; //剩下的所有Block的数量(包括预留的一般程序无法使用的块) private TextView mTvSDTotalSize; //SDCard 总容量大小MB private TextView mTvSDFreeSize; //SDCard 剩余大小MB @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 得到布局中的控件 findView(); // 绑定控件事件 SDCardSizeTest(); } private void findView() { // 绑定控件 mTvTotalBlocks = (TextView)findViewById(R.id.tv_TotalBlocks); mTvBlocSize = (TextView)findViewById(R.id.tv_BlocSize); mTvAvailaBlock = (TextView)findViewById(R.id.tv_AvailaBlock); mTvFreeBlock = (TextView)findViewById(R.id.tv_FreeBlock); mTvSDTotalSize = (TextView)findViewById(R.id.tv_SDTotalSize); mTvSDFreeSize = (TextView)findViewById(R.id.tv_SDFreeSize); } public void SDCardSizeTest() { // 取得SDCard当前的状态 String sDcString = android.os.Environment.getExternalStorageState(); //如果当前系统有sdcard存在 if (sDcString.equals(android.os.Environment.MEDIA_MOUNTED)) { // 取得sdcard文件路径 File pathFile = android.os.Environment .getExternalStorageDirectory(); //得到sdcard的状态 android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath()); // 获取SDCard上BLOCK总数 long nTotalBlocks = statfs.getBlockCount(); mTvTotalBlocks.setText("SDCard上BLOCK总数: "+nTotalBlocks); // 获取SDCard上每个block的SIZE long nBlocSize = statfs.getBlockSize(); mTvBlocSize.setText("SDCard上每个bloc的SIZE:"+nBlocSize); // 获取可供程序使用的Block的数量 long nAvailaBlock = statfs.getAvailableBlocks(); mTvAvailaBlock.setText("可供程序使用的Block的数量 : " + nAvailaBlock); // 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块) long nFreeBlock = statfs.getFreeBlocks(); mTvFreeBlock.setText("剩下的所有Block的数量: " + nFreeBlock); // 计算SDCard 总容量大小MB long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024; mTvSDTotalSize.setText("SDCard 总容量大小MB: " + nSDTotalSize +"MB"); // 计算 SDCard 剩余大小MB long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024; mTvSDFreeSize.setText(" SDCard 剩余大小MB: " + nSDFreeSize +"MB"); } } }
import android.os.Bundle; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; import java.io.BufferedReader; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private TextView myTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView= (TextView)findViewById(R.id.myTextView); StringBuilder log = new StringBuilder(); String inPath = getInnerSDCardPath(); String str="内置SD卡路径:" + inPath + "\r\n"; log.append("内置SD卡路径:" + inPath + "\r\n"); List<String> extPaths = getExtSDCardPath(); for (String path : extPaths) { str=str+"外置SD卡路径:" + path + "\r\n"; log.append("外置SD卡路径:" + path + "\r\n"); } myTextView.setText(str); System.out.println(log.toString()); } /** * 获取内置SD卡路径 * @return */ public String getInnerSDCardPath() { return Environment.getExternalStorageDirectory().getPath(); } /** * 获取外置SD卡路径 * @return 应该就一条记录或空 */ public List<String> getExtSDCardPath() { List<String> lResult = new ArrayList<String>(); try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("mount"); InputStream is = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { if (line.contains("extSdCard")) { String [] arr = line.split(" "); String path = arr[1]; File file = new File(path); if (file.isDirectory()) { lResult.add(path); } } } isr.close(); } catch (Exception e) { } return lResult; }
分类:
android
标签:
android
, 获得SDCard信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2014-12-02 使用NPOI将DataTable生成Excel
2013-12-02 C# for AUTOCAD ActiveX获取图形对象坐标程序
2010-12-02 二调,分幅图打印(标准分幅土地利用现状图,耕地坡度分级图),图框工具
2010-12-02 二调,分幅图打印 边框注记距离内图框1毫米的程序
2010-12-02 通过ArcEngine获得注记的信息
2010-12-02 ArcEngine 获得注记文字的大小
2010-12-02 arcgis 平台实现字体左斜