標籤:++ 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中按照數字大小來排序檔案