android读取文件夹的大小以及

本文介绍了一个简单的Android应用程序,用于扫描设备存储中特定目录下的图片文件(包括.jpg、.png、.bmp、.gif 和 .jpeg格式)。通过创建一个新的线程,程序遍历指定路径下的所有文件及子目录,并统计图片数量。

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.example.s_27;
 
import java.io.File;
 
import android.app.Activity;
import android.os.Bundle;
 
public class MainActivity extends Activity {
     
    public static int     i       = 0;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread() {
            public void run() {
                String path = "/sdcard/androidesk/";
                getFiles(path);
                 
                System.out.println(path + " 文件夹下面共有 " + i + " 张图片文件");
            };
        }.start();
    }
      
    private void getFiles(String string) {
        // TODO Auto-generated method stub 
        File file = new File(string);
        File[] files = file.listFiles();
        for (int j = 0; j < files.length; j++) {
            String name = files[j].getName();
            if (files[j].isDirectory()) {
                String dirPath = files[j].toString().toLowerCase(); 
                System.out.println(dirPath);
                getFiles(dirPath + "/");
            else if (files[j].isFile() & name.endsWith(".jpg") || name.endsWith(".png") || name.endsWith(".bmp") || name.endsWith(".gif") || name.endsWith(".jpeg")) {
                System.out.println("FileName===" + files[j].getName());
                i++;
            }
        }
         
    }
     
}




清单文件 manifest 节点下面添加 读取权限

1
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
### Android 中监听文件夹大小变化的实现方法 在 Android 开发中,监听文件夹大小的变化可以通过多种方式实现。以下是一些常用的技术方案: #### 方法一:使用 `FileObserver` 类 `FileObserver` 是 Android 提供的一个类,用于监控特定目录中的文件更改事件(如创建、修改或删除)。它能够捕获这些事件并触发回调函数。 ##### 步骤说明 1. 创建一个继承自 `FileObserver` 的类,并重写其 `onEvent()` 方法。 2. 在构造器中传入目标文件夹路径作为参数。 3. 当检测到文件被创建、修改或删除时,在 `onEvent()` 方法中重新计算文件夹大小。 ```java public class FolderSizeObserver extends FileObserver { public FolderSizeObserver(String path) { super(path, ALL_EVENTS); } @Override public void onEvent(int event, String file) { if (event == CREATE || event == MODIFY || event == DELETE) { long folderSize = getFolderSize(new File(getPath())); System.out.println("Updated folder size: " + folderSize + " bytes"); } } private long getFolderSize(File dir) { long result = 0; File[] files = dir.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { result += getFolderSize(file); // 递归调用处理子目录 } else { result += file.length(); // 累加文件长度 } } } return result; } } ``` 此代码片段展示了如何利用 `FileObserver` 来实时更新文件夹大小[^1]。 --- #### 方法二:定期轮询机制 另一种简单但效率较低的方法是通过定时任务周期性地扫描目标文件夹的内容,并比较前后两次的结果以判断是否有变化。 ##### 示例代码 下面是一个基于 Handler 和 Runnable 的简易轮询示例: ```java private final int POLL_INTERVAL_MS = 5000; // 轮询间隔时间设为5秒 private Handler handler = new Handler(Looper.getMainLooper()); private boolean isRunning = true; private void startPolling(final File targetDir) { Runnable pollingTask = () -> { while (isRunning) { try { Thread.sleep(POLL_INTERVAL_MS); long currentSize = getFolderSize(targetDir); Log.d("FolderMonitor", "Current Size: " + currentSize + " bytes"); // 将最新尺寸广播出去或者存储起来以便后续对比差异... } catch (InterruptedException e) { break; } } }; new Thread(pollingTask).start(); } // 辅助方法同前文定义一致 ... ``` 尽管这种方法易于理解且容易实现,但由于频繁访问文件系统可能带来性能开销,因此不推荐应用于频率场景下[^4]。 --- #### 方法三:结合 ContentProvider 和 UriMatcher 对于某些特殊类型的资源(比如媒体库),可以直接借助系统的 `MediaStore` API 或者其他形式的标准接口完成操作。不过这通常适用于那些已经注册成为共享数据源的对象集合之上,而非普通的私有沙盒区域内的任意位置上的随机文档集。 此处不再赘述相关内容细节[^5]。 --- ### 注意事项 无论采用哪种策略都需要考虑边界条件处理问题,例如异常断电恢复后的状态同步逻辑设计等等。另外还要注意权限管理方面的要求——从 Android N 开始引入了更加严格的动态授权流程控制措施,所以在实际部署之前务必确认应用具备足够的读取/写入许可权利才行哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值