android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
排序规则
由于是中国人,习惯性看中文文件夹放前面比较顺眼,因此在别人博客(https://blog.csdn.net/da_caoyuan/article/details/56664673)的基础上,加上了本身的排序规则。算法
默认排序规则是按照ASCII码表排序(http://ascii.911cha.com/),排序的步骤大概是:部分符号->数字->部分符号->大写字母->部分符号->小写字母->部分符号->中文。ide
因此我修改了逻辑,排序变成:中文->数字->字母(不区分大小写)->特殊字符spa
算法原理
一、将字符串不区分大小写.net
二、把字符串中的中文变成拼音的首字母code
三、识别字符串的第一个字符,若是是中文则在前面加上字符“.”,用于在compareTo方法中,排在数字前面blog
四、识别字符串的第一个字符,若是是符号(看ASCII表)则在前面加上字符“{”,用于在compareTo方法中,排在Z后面排序
代码
代码就不上注释了,也比较简单ci
File[] files = new File(path).listFiles();
List list;
if (files == null) {
list = new ArrayList<>();
} else {
list = Arrays.asList(files);
}
Collections.sort(list, new Comparator() {
@Override
public int compare(File o1, File o2) {
if (o1.isDirectory() && o2.isFile())
return -1;
if (o1.isFile() && o2.isDirectory())
return 1;
String name1 = o1.getName().toUpperCase();
char c1 = name1.toCharArray()[0];
String name11 = "";
for (char c11 : name1.toCharArray()) {
name11 += Pinyin.toPinyin(c11);
}
if (c1 >= 0x4E00 && c1 <= 0x9FA5) {
name1 = "." + name11;
} else if (c1 < 48) {
name1 = "{" + name11;
} else if (c1 > 57 && c1 < 65) {
name1 = "{" + name11;
}
String name2 = o2.getName().toUpperCase();
char c2 = name2.toCharArray()[0];
String name22 = "";
for (char c22 : name2.toCharArray()) {
name22 += Pinyin.toPinyin(c22);
}
if (c2 >= 0x4E00 && c2 <= 0x9FA5) {
name2 = "." + name22;
} else if (c2 < 48) {
name2 = "{" + name22;
} else if (c2 > 57 && c2 < 65) {
name2 = "{" + name22;
}
return name1.compareTo(name2);
}
});
android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...相关推荐
- Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)
Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...
- java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射
http://langgufu.iteye.com/blog/2107023 java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果 ...
- 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射...
内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码. file ...
- 【Java】获取目录及其子目录文件的相关事宜
获取目录及其子目录文件的代码 public class Main {public static void main(String[] args) {String path = "D:/&qu ...
- java指令导出data文件_直接用 java 命令行动态生成jpg文件 (转)
直接用 java 命令行动态生成jpg文件 (转)[@more@] /** * jeruGraphics v 1.0 * * 看到一些动态生成图象的例子都是完成的, * 而且很长,觉得不是无论从实用性 ...
- java读取局域网共享文件夹中文件并保存到本地文件夹
在磁盘新建一个文件夹,右击文件夹属性,点击共享 点击网络和共享中心 设置文件夹可访问权限 到此就可以用本地ip加文件夹名称访问了,同局域网也可以通过改地址访问 文件夹的名称来自这张图的 网络路径 如果 ...
- java从指定文件中删除字符串,java删除指定目录中的文件或文件夹
java删除指定目录中的文件或文件夹 package tf; import java.io.File; public class DelFile { public static void main(S ...
- java 递归获取目录下所有文件
对于一个嵌套的目录,获取目录下所有的文件,可以使用一下两种方式: 1.递归方法: static List<String> ergodic(File file, List<String ...
- header php下载文件很小,php中Accept-Length获取不到下载文件的大小
php中在做文件下载的时候,其中要加上这么一些header信息:header("Content-type: application/octet-stream"); header(& ...
- python获取url列表参数_python 获取url中的参数列表实例
Python的urlparse有对url的解析,从而获得url中的参数列表 import urlparse urldata = "http://en.wikipedia.org/w/api. ...
最新文章
- Unterminated array at character 6 of xxx
- 360数科发布2020全年财报:全年收入上涨47.1%,科技为运营效率提供第一动力
- 1200亿次日均位置服务响应、20亿公里日均轨迹里程,百度地图发布新一代人工智能地图生态全景
- 电子测量第三次作业 bgd150206305
- .NET Core HttpClient源码探究
- 算法之快速排序(递归和非递归)
- afn post请求上传文件_iOS利用AFNetworking(AFN) 实现图片上传
- android程序 幻灯片,Android:ViewPager制作幻灯片
- 复选框(checkbox)、单选框(radiobox)的使用
- 安卓学习笔记36:内容提供者
- gis导出栅格数据为什么不能tif_GIS基础操作教程(3)--点数据操作【附带练习数据】...
- 计算机怎么格式化电脑吗,电脑怎么格式化
- 更新python pip 时提示操作超时错误
- 一台计算机连接两个投影,一台电脑两个投影仪要如何连接
- phaser3 之 this.add.add.image
- 程序员,30岁+,看完让你不再焦虑
- 2060显卡驱动最新版本_显卡驱动需更新,铭瑄RTX显卡受益大
- 第二天 熟悉ue4工具 及快捷键
- Excel不用函数嵌套一键完成四舍六入五成双
- 深入理解Android Crash 流程