Java 中按名称对文件排序与 Windows 资源管理器不同
我有一个简单的 Java 程序,它读取文件目录并输出文件列表。 我按名称对文件进行排序:
String [] files = dirlist.list();
files = sort(files);
我的问题是它按名称排序的方式与 Windows 资源管理器不同。
例如,如果我有这些文件:abc1.doc、abc12.doc、abc2.doc。
Java 将如下排序:
abc1.doc
abc12.doc
abc2.doc
当我在 Windows 资源管理器中打开文件夹时,我的文件将如下排序:
abc1.doc
abc2.doc
abc12.doc
如何让 Java 像在 Windows 资源管理器中一样对文件进行排序? 这是 Windows 的伎俩吗?
I have a simple Java program which reads a file directory and outputs a file list.
I sort the files by name:
String [] files = dirlist.list();
files = sort(files);
My problem is that it sorts by name in a different way than Windows Explorer does.
For instance if I have these files: abc1.doc, abc12.doc, abc2.doc.
Java will sort like this:
abc1.doc
abc12.doc
abc2.doc
When I open the folder in Windows Explorer, my files are sorted like this:
abc1.doc
abc2.doc
abc12.doc
How can I make Java sort my files like in Windows Explorer?
Is this a Windows trick?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Windows 资源管理器使用自己的算法。为了像资源管理器一样对文件进行排序,您应该创建一个自定义比较器来实现这一目的:
现在,像这样使用它:
Windows Explorer uses its own algorithm. In order to sort your files like Explorer does, you should create a custom Comparator to do the trick:
Now, use it like this:
看起来是这样。
但是,您可以使用
Arrays.sort()
并提供自定义的Comparator
,以便它像 Windows 资源管理器一样排序。It looks that way.
However, you can use
Arrays.sort()
and supply a customComparator
so that it sorts like Windows Explorer does.按字符串排序,然后按名称长度排序。
Sort by string then by name length.
这是在 Java 中实现它的另一次尝试:
Java - 像 Windows 资源管理器一样对字符串进行排序
简而言之,它将两个字符串拆分为字母-数字部分进行比较,并以特定的方式比较这部分,以实现这种排序。
恕我直言,这样就更具可读性了。
This is another try to implement it in Java:
Java - Sort Strings like Windows Explorer
In short it splits the two Strings to compare in Letter - Digit Parts and compares this parts in a specific way to achieve this kind of sorting.
With this its IMHO a bit more readable.