解决java中按照数字大小来排序文件
我们想要输出(1.jpg、2.jpg、3.jpg、10.jpg、11.jpg、20.jpg、21.jpg、31.jpg)
突然看到网上一些写法
总结:既然自己按照定义的文件名规则来处理,也可以进行使用正则表达,简化使用
File[] files = file.listFiles();
if(files==null)return resultFileName;
List<File> fileList = new ArrayList<File>();
for (File f : files) {
fileList.add(f);
} Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isFile())
return -1;
if (o1.isFile() && o2.isDirectory())
return 1;
return o2.getName().compareTo(o1.getName());
}
}); for (File f : fileList) {
if(f.isDirectory()){
resultFileName.add(f.getPath());
ergodic(f,resultFileName);
}else
resultFileName.add(f.getPath());
}
但是它输出的是:(1.jpg、10.jpg、11.jpg、2.jpg、20.jpg、21.jpg、3.jpg、31.jpg)
看到这个明显是按照字典顺序来排序的 既然我们想要按照Integer 大小来进行排序处理
public static void main(String[] args) throws IOException {
File file = new File(path);
File[] files = file.listFiles();
ArrayList<File> list = new ArrayList<>();
for (File file2 : files) {
list.add(file2);
}
Collections.sort(list, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isFile())
return -1;
if (o1.isFile() && o2.isDirectory())
return 1;
Integer f = f(o1.getName());
Integer f2 = f(o2.getName());
return Integer.compare(f, f2);
}
});
for (File file2 : list) {
System.out.println(file2.getName());
}
}
static Integer f(String filename) {
int x = filename.indexOf(".");
String string2 = filename.substring(0,x);
char[] cs = string2.toCharArray();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < cs.length; i++) {
if(Character.isDigit(cs[i])) {
builder.append(cs[i]);
}
}
return Integer.parseInt(builder.toString());
}
使用正则表达式
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;
}
}
解决java中按照数字大小来排序文件的更多相关文章
- 浅谈利用同步机制解决Java中的线程安全问题
我们知道大多数程序都不会是单线程程序,单线程程序的功能非常有限,我们假设一下所有的程序都是单线程程序,那么会带来怎样的结果呢?假如淘宝是单线程程序,一直都只能一个一个用户去访问,你要在网上买东西还得等 ...
- java 中对象比较大小
java 中对象比较大小 java 中对象比较大小有两种方法 1:实现Comparable 接口 的 public int compareTo(T o) 方法: 2:实现Comparator 接口 的 ...
- 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中
package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...
- java中File的delete()方法删除文件失败的原因
java中File的delete()方法删除文件失败的原因 学习了:http://hujinfan.iteye.com/blog/1266387 的确是忘记关闭了: 引用原文膜拜一下: 一般来说 ja ...
- java中如何创建带路径的文件
请教各位大侠了,java中如何创建带路径的文件,说明下 这个路径不存在 ------回答--------- ------其他回答(2分)--------- Java code File f = new ...
- 解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号
解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号 在设置中把"vetur.format.defaultFormatter.js": " ...
- Java中8种常见的排序方法
排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...
- 如何让SQLServer的 itemNum 字段 按照数字大小顺序排序
我的 itemNum 从1到20,可是超过了SQLServer的默认排序这样的1101112...19234567如何才能让排序成为这样1234567891011.. . 解决办法:因为 itemNu ...
- 解决java中对URL编码的问题
首先查看javascript中的encodeURI和encodeURLComponent方法的区别. encodeURI:不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行 ...
随机推荐
- Linux学习之路(四)帮助命令
帮助命令man .man 命令 #获取指定命令的帮助 .man ls #查看ls的帮助 man的级别 1 查看命令的帮助 2 查看可被内核调用的函数的帮助 3 查看函数的函数库的帮助 4 查看特殊文件 ...
- BZOJ 1232 [Usaco2008Nov]安慰奶牛cheer:最小生成树【树上dfs性质】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1232 题意: 给你一个无向图,n个点,m条边. 每条边有边权len[i][j],每个点有点 ...
- js的内部类
JavaScript中本身提供一些,可以直接使用的类,这种类就是内部类.主要有: Object/Array/Math/Boolean/String/RegExp/Date/Number共8个内部类. ...
- Bootstrap简单介绍
一.一个小知识点 1.截取长屏的操作 2.设置默认格式 3.md,sm, xs 4.空格和没有空格的选择器 二.响应式介绍 - 响应式布局是什么? 同一个网页在不同的终端上呈现不同的布局等 - 响应式 ...
- DenseNet算法详解——思路就是highway,DneseNet在训练时十分消耗内存
论文笔记:Densely Connected Convolutional Networks(DenseNet模型详解) 2017年09月28日 11:58:49 阅读数:1814 [ 转载自http: ...
- 在node.js中建立你的第一个HTTp服务器
这一章节我们将从初学者的角度介绍如何建立一个简单的node.js HTTP 服务器 创建myFirstHTTPServer.js //Lets require/import the HTTP modu ...
- Apache-SimpleEmail 简单应用
比JavaMail使用方法要直接,jar包只需要在JavaMail的基础上添加commons-email-1.4.jar即可. 代码: // QQ邮箱发送邮件 SimpleEmail simpleEm ...
- MySQL多个条件以什么表当做主条件表_20161111周五
前两天有事情 停了2天 数据需求:1.活动日期11.8-11.10订单2.单笔订单购买A类产品 B类产品满足68元.且连续3天下单的用户ID 首先第一个条件很简单,主要是第二个条件 第二个条件是 且 ...
- 【转】有的共享软件赚了一百万美元,而为什么你没有?&&我的软件推广成功之路
有的共享软件赚了一百万美元,而为什么你没有? 转自:http://blog.csdn.net/wangjiwei2010/article/details/1267044 译:DreamGoal 原作: ...
- 杂项随记:gcc/objdump/section等
gcc -g 如果不打开-g或者-ggdb(GDB专用)调试开关,GCC编译时不会加入调试信息,因为这会增大生成代码的体积.GCC采用了分级调试,通过在-g选项后附加数字1.2或3来指定在代码中加入调 ...