当前位置: 首页 > 知识库问答 >
问题:

使用java数组列表按大小对目录中的文件进行排序[重复]

诸葛煜
2023-03-14
    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;  

    public class SortingFiles
    {
        public static void main(String[] args) 
        {
            File dir=null;
            File[] paths;

            final ArrayList<String> al= new ArrayList<String>();


            try{      
                // create new file object
                dir = new File("D:\\New folder\\New");

                // array of files and directory
                paths = dir.listFiles();


                ArrayList<File> fileList = new ArrayList<File>();


                for(File file:paths)
                {
                    // prints filename and directory name
                    System.out.println(file.getName()+" - " +file.length() );


                    al.add(file.getName());
}


        }
        catch(Exception e)
        {
                        e.printStackTrace();
        }
    }
 for(int i=1; i<al.size(); i++)
 {
         System.out.println("\n  Aftr : " +al.get(i) );
  }

但它不起作用..任何人都可以帮助我...我正在尝试不使用“import org.apache.commons.io.fileUtils;”。那怎么办呢?

共有1个答案

卜瀚漠
2023-03-14

al中使用(namesize)对象,然后使用collections.sort使用自定义的比较器进行排序(或使该自定义对象)。类似于:

public class FileData implements Comparable<FileData> {
    private final String fileName;
    private final long fileSize;

    public FileData(final String fileName, final long fileSize) {
        this.fileName = fileName;
        this.fileSize = fileSize;
    }

    // getters

    @Override
    public String toString() {
        return (fileName == null ? "" : fileName) + " - " + fileSize;
    }

    @Override
    public int compareTo(FileData other) {
        return Long.compare(fileSize, other.fileSize);
    }
}

然后:

public class SortingFiles
{
    public static void main(String[] args) {
        // ...
        final List<FileData> al = new ArrayList<FileData>();
        // ...
        for (final File file: paths) {
            final FileData fileData = new FileData(file.getName(), file.length());
            System.out.println(fileData);
            al.add(fileData);
        }
        // ...
        Collections.sort(al);
        // ...

未测试,甚至未编译(在此键入)

 类似资料:
  • 我试图建立一个方法,将排序一个二维数组的双打按列。基于所提供的规范,此方法也不应该采用长度不等的行的粗糙数组。我正在使用双[][]mdarray={{3.0, 4.0, 1.0, 8.0},{13.0, 2.0, 12.0, 9.0}测试这个 使用打印方法时,应将其显示为 3.0, 2.0, 1.0, 8.0, 13.0, 4.0, 12.0, 9.0, 使用单独的打印方法输出结果时,数组似乎没有

  • 也许有更合适的解决方案?:/

  • 问题内容: 这是我的代码,它有效!但我希望能够根据名称,大小,修改日期等对文件列表进行排序 问题答案: 您可以定义许多不同的类来进行不同的比较,例如: 然后,您只需将它们换出: 要么

  • 我有以下课程 我正在尝试按贡献者名称和角色名称对ResourceContributor列表进行排序。到目前为止,我得到的是: 我已经尝试使用then比较,但还不知道如何使用它。

  • 我一直在做拼字游戏作业。我需要从列表中读取单词,然后读取每个字符并赋值,最终为每个单词分配一个总分。已经完成了!唷。现在我需要使用比较器将单词从最高分到最低分进行排序。读了很多,还是很迷茫。我知道我可以使用接口,但也有使用lambda表达式的比较器,这是我想去的方向。我只是不知道该怎么做。我需要比较每个单词的sumValue,然后按降序打印单词。 我创建了 2 个循环来读取单词 (i),然后是字符

  • 我有一个包含下一个数据的ArrayList:(int)、(int)、(int)、(String)。我按字段对此数组进行排序。如果长度与提交的相等,我如何赋予优先级(优先级将具有具有水平位置的长度)。例如,给定输入: 输出应为: 以下是我所拥有的: