解決java中按照數字大小來排序檔案

來源:互聯網
上載者:User

標籤:++   exce   print   array   .so   for   lis   rri   i++   

 

我們想要輸出(1.jpg、2.jpg、3.jpg、10.jpg、11.jpg、20.jpg、21.jpg、31.jpg)

突然看到網上一些寫法

 

總結:既然自己按照定義的檔案名稱規則來處理,也可以進行使用正則表達,簡化使用

 

 1 File[] files = file.listFiles(); 2 if(files==null)return resultFileName; 3 List<File> fileList = new ArrayList<File>(); 4 for (File f : files) { 5     fileList.add(f); 6 } 7  8 Collections.sort(fileList, new Comparator<File>() { 9     @Override10     public int compare(File o1, File o2) {11         if (o1.isDirectory() && o2.isFile())12             return -1;13         if (o1.isFile() && o2.isDirectory())14             return 1;15         return o2.getName().compareTo(o1.getName());16     }17 });18 19 for (File f : fileList) {20     if(f.isDirectory()){21         resultFileName.add(f.getPath());22         ergodic(f,resultFileName);23     }else24         resultFileName.add(f.getPath());25 }

 

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

看到這個明顯是按照字典順序來排序的 既然我們想要按照Integer 大小來進行排序處理

 

 1 public static void main(String[] args) throws IOException { 2         File file = new File(path); 3         File[] files = file.listFiles(); 4         ArrayList<File> list = new ArrayList<>(); 5         for (File file2 : files) { 6  7             list.add(file2); 8         } 9         10         Collections.sort(list, new Comparator<File>() {11             @Override12             public int compare(File o1, File o2) {13                 if (o1.isDirectory() && o2.isFile())14                     return -1;15                 if (o1.isFile() && o2.isDirectory())16                     return 1;17                 Integer f = f(o1.getName());18                 Integer f2 = f(o2.getName());19                 return Integer.compare(f, f2);20             }21         });22         for (File file2 : list) {23             System.out.println(file2.getName());24         }25 26     }27     28     static Integer f(String filename) {29         int x = filename.indexOf(".");30         String string2 = filename.substring(0,x);31         char[] cs = string2.toCharArray();32         StringBuilder builder = new StringBuilder();33         for (int i = 0; i < cs.length; i++) {34             if(Character.isDigit(cs[i])) {35                 builder.append(cs[i]);36             }37         }38         return Integer.parseInt(builder.toString());39     }

 

 

使用Regex

 1 public final class FileString implements Comparable<FileString> { 2     private final String fileName; 3     private final int prefix_num; 4     Pattern number = Pattern.compile("(\\d+)\\..*"); 5  6     public FileString(String fileName) { 7         this.fileName = fileName; 8         Matcher matcher = number.matcher(fileName); 9         if (matcher.find()) {10             prefix_num = Integer.parseInt(matcher.group(1));11         } else {12             prefix_num = 0;13         }14     }15 16     @Override17     public int compareTo(FileString o) {18         return o.prefix_num > prefix_num ? -1 : o.prefix_num == prefix_num ? 0 : 1;19     }20 21     @Override22     public String toString() {23         return fileName;24     }25 }

 

解決java中按照數字大小來排序檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.