sheldon_blogs

Android : 获取内部存储信息方法总结

  通过 df  指令可查看当前文件系统的磁盘空间占用情况:

 

方法一:

复制代码
private long getSDCardAvailSize() {    
    String state = Environment.getExternalStorageState();  
    long aaa=0;    
    if (Environment.MEDIA_MOUNTED.equals(state)) {      
        File sdcardDir = Environment.getExternalStorageDirectory();        
        StatFs sf = new StatFs(sdcardDir.getPath());     
        long blockSize = sf.getBlockSize(); 
        long blockCount = sf.getBlockCount();      
        long availCount = sf.getAvailableBlocks();     
        long totalSeize = blockSize * blockCount;     
        aaa = availCount * blockSize;      
        Log.e("size", "block大小:" + blockSize + ",block数目:" + blockCount + ",总大小:" + blockSize * blockCount / 1024 + "KB");  
        Log.e("size", "可用的block数目::" + availCount + ",剩余空间:" + availCount * blockSize / 1024 + "KB"); 
    }   
    return aaa;
}
复制代码

方法二:

复制代码
  public long getSystemAvailableStorage() throws RemoteException {
        try {
            StorageStatsManager stats = mContext.getSystemService(StorageStatsManager.class);
            return stats.getFreeBytes(StorageManager.UUID_DEFAULT)/1024/1024;
        } catch (NoSuchFieldError | NoClassDefFoundError | NullPointerException | IOException e) {
            e.printStackTrace();
            return -1;
        }
    }
复制代码

方法三:

    //获取可用存储大小,data区的剩余空间,返回字节数public long getAvailableInternalSize() {
        File path = Environment.getDataDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();
        return availableBlocks * blockSize;
    }

 

补充:该方法获取当前Emmc总大小:

复制代码
    public long getSystemTotalStorage() throws RemoteException {
        try {
            long iTotalSize = -1;
            FileInputStream fis = new FileInputStream(new File("/proc/partitions"));
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String Line = "";
            while ((Line = br.readLine()) != null) {
                if (Line.length() > 7 && Line.lastIndexOf(" ") > 0) {
                    if (Line.substring(Line.lastIndexOf(" ") + 1 , Line.length()).equals("mmcblk0")) {
                        int lastSpacePos = Line.lastIndexOf(" ");
                        String sOnlyNumber = Line.substring(0, lastSpacePos-1);
                        int lastSpaceBeforeSize = sOnlyNumber.lastIndexOf(" ");
                        String sTotalSize = Line.substring(lastSpaceBeforeSize+1, lastSpacePos);
                        Log.d(TAG, "sTotalSize = " + sTotalSize);
                        iTotalSize = Long.parseLong(sTotalSize)/1024;
                        break;
                    }
                }
            }
            br.close();
            return iTotalSize;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return -1;
    }
复制代码

 

posted on   sheldon_blogs  阅读(2715)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2016-03-19 Linux I2C总线控制器驱动(S3C2440)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示