天涯共明月 2017-03-30 10:23 采纳率: 20%
浏览 4989
已采纳

java中如何按照数字大小来排序获取文件夹内的文件名

如何按照顺序读取文件夹内的文件名:

如输出(1.jpg、2.jpg、3.jpg、10.jpg、11.jpg、20.jpg、21.jpg、31.jpg) 


  // 图片 文件夹
        File imgFile = new File(imgFilePath);

        // 图片文件夹路径不存在,则创建
        if (!imgFile.exists()) {
            imgFile.mkdirs();
        }else {
            // 存在图片,则直接获取
            String[] list = imgFile.list(); //获取文件夹内的所有文件名
            if(list != null){

                //深拷贝  //浅拷贝 Arrays.asList(list)
                for (String name : list) {
                    imgURList.add(name); //把文件名放入list里面
                }

                // 对 list 排序
                Collections.sort(imgURList);


            }

// 对 list 排序 Collections.sort(imgURList);

但是它输出的是:(1.jpg、10.jpg、11.jpg、2.jpg、20.jpg、21.jpg、3.jpg、31.jpg)

不是我想要的按**数字大小**来排序的
我想要输出(1.jpg、2.jpg、3.jpg、10.jpg、11.jpg、20.jpg、21.jpg、31.jpg)

请教大神们,谁做过没有呢??

  • 写回答

1条回答 默认 最新

  • little_how 2017-03-30 11:17
    关注
     import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * FileString
     *
     * @author littlehow
     * @time 2017-03-30 19:03
     */
    public final class FileString implements Comparable<FileString> {
        private final String fileName;
        private final int prefix_num;
        Pattern number = Pattern.compile("(\\d+)\\..*");
    
        public FileString(String fileName) {
            this.fileName = fileName;
            Matcher matcher = number.matcher(fileName);
            if (matcher.find()) {
                prefix_num = Integer.parseInt(matcher.group(1));
            } else {
                prefix_num = 0;
            }
        }
    
        @Override
        public int compareTo(FileString o) {
            return o.prefix_num > prefix_num ? -1 : o.prefix_num == prefix_num ? 0 : 1;
        }
    
        @Override
        public String toString() {
            return fileName;
        }
    }
    

    然后把你的imgURList申明为ArrayList<FileString>
    然后imgURList.add(new FileString(name));

    后面的就不需要变了,sort后,就会按照你的要求排序了;

    如果有帮助,希望采纳....

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误