输出其中有所需文件的文件夹

Output of folders inside which there is a desired file

在我的程序中,实现了以下内容其中有一个listView,我把里面有一定数据的文件夹拿出来。但其中一些是空的。我正在尝试检查它是否不会在 listView

中为我显示空文件夹
public static File dir= new File(Environment.getExternalStorageDirectory().getPath()+"/Sales/Archive");

ArrayList<String> theNamesOfFiles = new ArrayList<>();
        File[] filelist = dir.listFiles();
        for (int i = 0; i < filelist.length; i++) {
            long diff = (new Date().getTime() - filelist[i].lastModified())  / 144 / 144 / 144;
            Arrays.sort(filelist, Comparator.comparingLong(File::lastModified).reversed());
            if (diff < 72)
                theNamesOfFiles.add(filelist[i].getName());
        }

经过一些尝试,结果证明他进入了那里的每个文件寻找我需要的东西。但是没有它们他显示的一切都一样

File Path = new File((new File(ArchiveDir)).getParent());
        File[] listFile = Path.listFiles();
        for (File file : listFile) {
            File[] listFile2 = file.listFiles();
            for (File file2 : listFile2){
                if (file.isDirectory() && file2.getName().toUpperCase().contains("S")) {
                    File[] filelist = Path.listFiles();
                    for (int i = 0; i < filelist.length; i++) {
                        long diff = (new Date().getTime() - filelist[i].lastModified()) / 144 / 144 / 144;
                        Arrays.sort(filelist, Comparator.comparingLong(File::lastModified).reversed());
                        if (diff < 72)
                            theNamesOfFiles.add(filelist[i].getName());
                    }
                }
            }
        }

据我了解,theNamesOfFiles 是一个文件夹列表。它包含单个文件夹的名称。所以,如果你想检查该文件夹是否为空,可以通过 file.length() 函数来完成。其中 returns 0 如果 file 为空。

这是我认为最适合您的解决方案。

 if (file.isDirectory() && file2.getName().toUpperCase().contains("S")) {
                    File[] filelist = file2.listFiles(); //update
                    for (int i = 0; i < filelist.length; i++) {
                        long diff = (new Date().getTime() - filelist[i].lastModified()) / 144 / 144 / 144;
                        Arrays.sort(filelist, Comparator.comparingLong(File::lastModified).reversed());
                        if (diff < 72)
                          if(filelist[i].length() !=0) //update
                            theNamesOfFiles.add(filelist[i].getName());//update
                    }
                }

这将确保索引 i 处的元素不为空。如果它是空的,它将被跳过。我不会被添加到你的列表中。

这是我的问题的解决方案。但其中有细微差别。我的程序每次启动时都会创建一个文件(数据备份),出于某种原因,这段代码只会跳过创建的文件。

int i = 0;

File Path = new File((new File(ArchiveDir)).getParent());
        File[] listFile = Path.listFiles();
        for (File file : listFile) {
            i ++;
            File[] listFile2 = file.listFiles();
            for (File file2 : listFile2){
                if (file2.getName().toUpperCase().contains("S")) {
                    long diff = (new Date().getTime() - listFile[i].lastModified()) / 144 / 144 / 144;
                    Arrays.sort(listFile, Comparator.comparingLong(File::lastModified).reversed());
                    if (diff < 72) {
                        theNamesOfFiles.add(listFile[i].getName());
                    }
                }
            }
        }