【问题标题】:Search entire sdcard for a specific file在整个 SD 卡中搜索特定文件
【发布时间】:2012-07-08 08:48:53
【问题描述】:

我知道如何搜索文件,但使用特定路径,例如 /sdcard/picture/file。有没有办法搜索该特定文件。示例:搜索文件。然后应用程序将其定位在 /sdcard/picture 中。然后抹掉。

有什么帮助吗?谢谢(我知道如何擦除文件,但必须写入整个路径)

【问题讨论】:

    标签: java android file search


    【解决方案1】:

    您可以从外部存储/SD卡的根目录开始递归解决该问题。

    一些未经测试的代码超出我的脑海(方法名称可能是错误的)

    public File findFile(File dir, String name) {
        File[] children = dir.listFiles();
    
        for(File child : children) {
            if(child.isDirectory()) {
               File found = findFile(child, name);
               if(found != null) return found;
            } else {
                if(name.equals(child.getName())) return child;
            }
        }
    
        return null;
    }
    

    如果您想在 SD 卡上找到该文件名的所有次出现,则必须使用列表来收集和返回所有找到的匹配项。

    【讨论】:

    • 试试这个,但是 getFiles();是 java.io.File 的未知方法,我尝试的每个方法都说不能与 java.io.File[] 一起使用
    • 嗯...正如我所说,这是用于说明递归解决该问题的一般概念的未经测试的代码。反正。我用正确的函数调用更新了我的示例。
    • 好的,谢谢,最后一个问题目录是 sdcard 吗?如果不是,那是什么?
    • Environment.getExternalStorageDirectory();会给你SD卡,确保你有所需的权限!
    • 这段代码在哪里返回搜索到的文件的文件路径??
    【解决方案2】:

    试试这个:

    public class Test {
        public static void main(String[] args) {
            File root = new File("/sdcard/");
            String fileName = "a.txt";
            try {
                boolean recursive = true;
    
                Collection files = FileUtils.listFiles(root, null, recursive);
    
                for (Iterator iterator = files.iterator(); iterator.hasNext();) {
                    File file = (File) iterator.next();
                    if (file.getName().equals(fileName))
                        System.out.println(file.getAbsolutePath());
                        file.delete();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

    • 我从 FileUtils 获取未知实体
    • 这是因为上面的例子不是直接针对Android开发的。 FileUtils 是 Apache Commons 库中的一个组件。此外要小心,不要硬编码外部存储的路径。无法保证所有设备的外部存储都安装在名为“/sdcard/”的目录中。您需要使用SDK methods 来获取正确的路径。
    • 那么搜索整个文件呢?甚至是手机?
    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2011-02-14
    相关资源
    最近更新 更多