【问题标题】:Output of folders inside which there is a desired file输出其中有所需文件的文件夹
【发布时间】:2021-09-19 11:49:51
【问题描述】:

在我的程序中,下面是实现的,里面有一个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());
                    }
                }
            }
        }

【问题讨论】:

  • 我无法正确理解问题。
  • @Anirudhsinh Jadeja 改变了问题。我希望这样会更好
  • 据我了解,您将文件名存储在theNamesOfFiles 中。那么,如果我们运行theNamesOfFiles.get(index),它会给我们单独的文件名,对吗?
  • @Anirudhsinh Jadeja 我可能没有测试过
  • 如果我的回答没有帮助,请在评论中告诉我。

标签: java android file listview


【解决方案1】:

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

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());
                    }
                }
            }
        }

【讨论】:

    【解决方案2】:

    据我了解,theNamesOfFiles 是一个文件夹列表。它包含单个文件夹的名称。因此,如果您想检查该文件夹是否为空,可以通过 file.length() 函数完成。如果file 为空,则返回0

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

     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 处的元素不为空。如果它是空的,它将被跳过。我不会被添加到你的列表中。

    【讨论】:

    • 没有改变
    • 尝试用listFile2[i].length()!=0替换if条件。
    • listFile2 [i] .length () 1 = 0这样写会报错。
    • 我的错...是! 而不是1
    • 我不是说错字,而是java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多