精华内容
下载资源
问答
  • 1:按 文件名称 排序是什么规则呢?windows的命名规则是,特殊字符(标点、符号)> 数字 > 字母顺序 > 汉字拼音。首字规则,首字相同看第二个,依次类推…例如:全是数字的情况,100<200<300 ;111<...

    1:按 文件名称 排序是什么规则呢?

    windows的命名规则是,特殊字符(标点、符号)> 数字 > 字母顺序 > 汉字拼音。首字规则,首字相同看第二个,依次类推…

    例如:全是数字的情况,100<200<300 ;111<121<131; 111<112<113;

    2:按 文件日期 排序是什么规则呢?

    按 文件日期 排序分两种:

    (1)按文件创建日期排序(比较特殊)

    (2)按文件修改日期排序

    文件创建日期排序:也就字面意思啦。

    文件修改日期排序:按照文件修改日期排序。

    3:按 文件大小 排序是什么规则呢?

    这个就比较简单了,按文件占用内存的大小排序。

    规则,清楚了。那么,就进入正题。怎么让 file.listFiles() 返回的 File[ ] 是按照上面所说的规则排序呢?

    1:按 文件名称 排序

    public static void orderByName(String filePath) {

    File file = new File(filePath);

    File[] files = file.listFiles();

    List fileList = Arrays.asList(files);

    Collections.sort(fileList, new Comparator() {

    @Override

    public int compare(File o1, File o2) {

    if (o1.isDirectory() && o2.isFile())

    return -1;

    if (o1.isFile() && o2.isDirectory())

    return 1;

    return o1.getName().compareTo(o2.getName());

    }

    });

    for (File file1 : files) {

    System.out.println(file1.getName());

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    打印的顺序是:按照递增的顺序排列

    2:按 文件日期 排序

    按 文件修改日期:递增

    public static void orderByDate(String filePath) {

    File file = new File(filePath);

    File[] files = file.listFiles();

    Arrays.sort(files, new Comparator() {

    public int compare(File f1, File f2) {

    long diff = f1.lastModified() - f2.lastModified();

    if (diff > 0)

    return 1;

    else if (diff == 0)

    return 0;

    else

    return -1;//如果 if 中修改为 返回-1 同时此处修改为返回 1 排序就会是递减

    }

    public boolean equals(Object obj) {

    return true;

    }

    });

    for (int i = 0; i < files.length; i++) {

    System.out.println(files[i].getName());

    System.out.println(new Date(files[i].lastModified()));

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    3:按 文件大小 排序

    public static void orderByLength(String filePath) {

    File file = new File(filePath);

    File[] files = file.listFiles();

    List fileList = Arrays.asList(files);

    Collections.sort(fileList, new Comparator() {

    public int compare(File f1, File f2) {

    long diff = f1.length() - f2.length();

    if (diff > 0)

    return 1;

    else if (diff == 0)

    return 0;

    else

    return -1;//如果 if 中修改为 返回-1 同时此处修改为返回 1 排序就会是递减

    }

    public boolean equals(Object obj) {

    return true;

    }

    });

    for (File file1 : files) {

    if (file1.isDirectory()) continue;

    System.out.println(file1.getName() + ":" + file1.length());

    }

    }

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    这样,打印的顺序是:按照递增的顺序排列

    喜欢本文的朋友们,欢迎关注微信公众号“Java面试达人”,收看更多精彩内容

    201904141404570.jpg

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    展开全文
  • 十七、实现Windows中的文件名排序

    千次阅读 2019-01-13 15:19:10
    Windows中读取一个文件夹下的所有文件时,JDK会自动按照文件名进行排序,但是和Windows中的排序规则略有不同,如下: 1、Windows中的排序 2、JAVA中的排序 第189章 一直对你比较感兴趣.txt 第1...

    (一)普通JAVA排序和Windows排序的异同
      我们在使用File[] files = new File("E:\\demo\\novel").listFiles();从Windows中读取一个文件夹下的所有文件时,JDK会自动按照文件名进行排序,但是和Windows中的排序规则略有不同,如下:

    1、Windows中的排序
    在这里插入图片描述

    2、JAVA中的排序

    第189章 一直对你比较感兴趣.txt
    第18章 想女人想疯了.txt
    第190章 你二嫂,我老婆.txt
    第191章 小三,狐狸精.txt
    第192章 你也喜欢是不是.txt
    第193章 二叔吃醋太惊悚.txt
    第194章 小东西,这么着急.txt
    第195章 岁月沉长,两情缠绵.txt
    第196章 真的喜欢你.txt
    第197章 爱惨了他.txt
    第198章 一切有我,不用担心.txt
    第199章 干一架痛快.txt
    第19章 夏小玖真的是你吗.txt
    第1章 火热的身体.txt
    第200章 冲冠一怒为红颜.txt
    第201章 米利竟然是它.txt
    第202章 老子的女人你也敢碰.txt
    第203章 学别人跟男人同居.txt
    第204章 一起“锻炼身体”.txt
    

      从上面我们可以看出,对于 第1章 ,在Windows中是排在最前面的,而在Java中, 第1章 是排在所有以 1 开头的章节的最后面,比如 第10章第100章第1000章

      下面,我们就对排序进行一定的改造,实现仿windows对文件名进行排序。

    (二)仿windows对文件名进行排序

      基本思想:将文件名作为一个字符串,依次遍历字符串中的每个字符进行比较,这里暂定待比较的字符串为 S1S2 ,使用Collator.getInstance(java.util.Locale.CHINA).compare(s1, s2)实现汉字、字母和数字大小的比较,比较规则如下:

    • 首先比较S1 和 S2 的长度,取最小长度
    • 然后按照最小长度,依次遍历字符串中的每个字符
      • 第一步:若取出的两个字符都是数字,则将数字保存到 StringBuffer 中,同时使用 continue 关键字,不执行后续逻辑,直接继续排序;
      • 第二步:当第一步执行完毕,判断若两个StringBuffer都非空
        • 1、若S1取出的字符还是数字,说明 类似于 第105章 和 第10章 这样的情况,则S1的排序应该在S2的后面,返回 1(大于1,则往后排);
        • 2、若S2取出的字符还是数字,则情况相反,返回 -1;
      • 第三步:若取出的两个字符不同时都是数字,则使用上面Collator.getInstance(java.util.Locale.CHINA).compare(s1, s2)进行比较,若返回值不是0,则两个字符不等,停止比较,返回比较结果;
      • 第四步:若经过最小长度比较,依然相等,则有两种情况:
        • 第一种:第10 第20,这种情况是S1和S2字符串长度相等,且两个StringBuffer都非空,则表明在取数字时并未进行比较久结束了,所以这里需要比较取出的值大小
        • 第二种:第10 第103,这种只需要比较两个字符串的长度,谁长谁排在后面

    代码实现如下:

    import java.text.Collator;
    import java.util.*;
    
    /**
     * @author 咸鱼
     * @date 2019/1/13 10:09
     */
    public class SortUtil {
        public static void main(String[] args) {
            List<String> sortList = new ArrayList<>();
            sortList.add("第四");
            sortList.add("第20");
            sortList.add("第二");
            sortList.add("第3");
            sortList.add("第三");
            sortList.add("第10");
            sortList.add("第1088");
            //这是比较方法(可比较中文,但对于生僻字,效果不太好)
            Comparator<Object> CHINA_COMPARE = Collator.getInstance(java.util.Locale.CHINA);
            sortList.sort((o1, o2) -> {
                //比较的基本原则,拿最小长度的字符串进行比较,若全部相等,则长字符串往后排
                int len1 = o1.length();
                int len2 = o2.length();
                int len = (len1 - len2) <= 0 ? len1 : len2;
                StringBuilder sb1 = new StringBuilder();
                StringBuilder sb2 = new StringBuilder();
                for (int i = 0; i < len; i++) {
                    String s1 = o1.substring(i, i + 1);
                    String s2 = o2.substring(i, i + 1);
                    if (isNumeric(s1) && isNumeric(s2)){
                        //取出所有的数字
                        sb1.append(s1);
                        sb2.append(s2);
                        //取数字时,不比较
                        continue;
                    }
                    if (sb1.length() != 0 && sb2.length() != 0){
                        if (!isNumeric(s1) && !isNumeric(s2)){
                            int value1 = Integer.valueOf(sb1.toString());
                            int value2 = Integer.valueOf(sb2.toString());
                            return value1 - value2;
                        } else if (isNumeric(s1)) {
                            return 1;
                        } else if (isNumeric(s2)) {
                            return -1;
                        }
                    }
                    int result = CHINA_COMPARE.compare(s1, s2);
                    if (result != 0) {
                        return result;
                    }
                }
                //这一步:是为了防止以下情况:第10  第20,正好以数字结尾,且字符串长度相等
                if (len1 == len2 && sb1.length() != 0 && sb2.length() != 0) {
                    int value1 = Integer.valueOf(sb1.toString());
                    int value2 = Integer.valueOf(sb2.toString());
                    return value1 - value2;
                }
                //若前面都相等,则直接比较字符串的长度,长的排后面,短的排前面
                return Integer.compare(len1, len2);
            });
        }
        //判断是否是数字
        private static boolean isNumeric(String s){
            return Character.isDigit(s.charAt(0));
        }
    }
    
    展开全文
  • Windows按名称排序问题

    2013-09-02 14:08:00
    偶然发现一个按名称排序的文件夹内,文件顺序是混乱的,例如: 在一个文件夹内建立如下三个文件: ...Win7,Win8,及Windows server 2008均按上述规则排序。 查了一下,发现微软的网站上对...

    偶然发现一个按名称排序的文件夹内,文件顺序是混乱的,例如:

    在一个文件夹内建立如下三个文件:

    0F.txt

    1A.txt

    02.txt

    按名称/升序排列, 将得到上述结果,0F在最前,02在最后。

    百思不得其解,同样是0开头,为什么02会被排在1A之后?

    Win7,Win8,及Windows server 2008均按上述规则排序。

     

    查了一下,发现微软的网站上对此有说明:

    http://support.microsoft.com/kb/319827

     

    原来对于有数字的文件名,windows会尝试找出数字部分,按数字大小进行排序。

    上述三个文件名中,第一个提取出0(F被忽略),第二个提取出1,第三个提取出02(2),结果就是上面这样了……

    多么愚蠢和无聊的想法啊!这竟然还是各版本Windows默认的排序方式。

     

    可通过修改注册表的方式使Windows按旧版的字母顺序排序,方式是在

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Currentversion\Policies\Explorer]

    [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Currentversion\Policies\Explorer]

     

    两个路径下新建一个名为NoStrCmpLogical的字段,数据类型是DWORD,令其值为1,然后重启电脑即可。

    注册表文件内容如下:

    --------------------------------------------------

    Windows Registry Editor Version 5.00

     

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Currentversion\Policies\Explorer]
    "NoStrCmpLogical"=dword:00000001

     

    [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Currentversion\Policies\Explorer]
    "NoStrCmpLogical"=dword:00000001

     

    --------------------------------------------------

    复制虚线之间的部分(注意包含空行),另存为reg文件,即可直接导入注册表。

     

    转载于:https://www.cnblogs.com/Moosdau/p/3296384.html

    展开全文
  • 往往添加排序处理后与windows排序规则不统一,所以要学会调用windows 的排序dll,可以节省很多时间。 //APP_DATA\Advertisement DirectoryInfo folder = new DirectoryInfo("./APP_DATA/Advertisement"); if
    正常的读取文件时非常简单的,按照文件名排序就要参照Windows的排序,
    往往添加排序处理后与windows的排序规则不统一,所以要学会调用windows

    的排序dll,可以节省很多时间。

    	//APP_DATA\Advertisement
    	DirectoryInfo folder = new DirectoryInfo("./APP_DATA/Advertisement");
    	if (folder.Exists)
    	{
    		FileInfo[] files = folder.GetFiles();
    		// 文件名的升序
    		Array.Sort(files, new FileNameSort());
    	}
    文件的排序功能,目测sort使用的是冒泡排序

        public class FileNameSort : IComparer
        {
    	//调用DLL
            [System.Runtime.InteropServices.DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
            private static extern int StrCmpLogicalW(string param1, string param2);
    
    
    		//前后文件名进行比较。
            public int Compare(object name1, object name2)
            {
                if (null == name1 && null == name2)
                {
                    return 0;
                }
                if (null == name1)
                {
                    return -1;
                }
                if (null == name2)
                {
                    return 1;
                }
                return StrCmpLogicalW(name1.ToString(), name2.ToString());
            }
        }

    展开全文
  • 正常的读取文件时非常简单的,按照文件名排序就要参照Windows的排序,往往添加排序处理后与windows排序规则不统一,所以要学会调用windows的排序dll,可以节省很多时间。 //APP_DATA\Advertisement ...
  • 1:按 文件名称 排序是什么规则呢?windows的命名规则是,特殊字符(标点、符号)> 数字 > 字母顺序 > 汉字拼音。首字规则,首字相同看第二个,依次类推…例如:全是数字的情况,100<200<300 ;111<...
  • 1:按 文件名称 排序是什么规则呢? windows的命名规则是,特殊字符(标点、符号)> 数字 > 字母顺序 > 汉字拼音。首字规则,首字相同看第二个,依次类推… 例如:全是数字的情况,100<200<300 ;...
  • MR之重写分区分组规则,movie评分高效排序案例分析 程序打包成jar包保存到windows本地桌面 ,运算数据提交到 hdfs 和 yarn 上运行,在windows java客户端启动程序 ,然后输出结果也是输出到 hdfs 上 1 先将数据上传到...
  • 【数据结构排序算法系列】数据结构八大排序算法

    万次阅读 多人点赞 2016-03-25 22:36:40
    排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据...
  • 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。...1:按 文件名称 排序是什么规则呢? windows的命名规则是,特殊字符(标点、符号)> 数字 > 字母...
  • Cannot resolve the collation conflict between SQL_Latin1_... 工作中,从国外得到一个MS SQL Server 2005的备份文件,打算把他还原到本地服务器使用里面的数据。 本地操作系统是MS Windows XP Profe
  • 排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据...
  • WinXP中文件名排序与Win2000中的排序规则有所区别,表现如下:如有下列文件:1.txt2.txt11.txt22.txt则Win2000下排序为1.txt11.txt2.txt22.txt而WinXP下排序为1.txt2.txt11.txt22.txt在默认方式下,Windows XP与 ...
  • windowsnt 技术内幕

    2014-04-09 20:47:17
    使用User Mnager for Domains创建用户帐号 刷新用户帐号列表 用户帐号列表的排序 事件查看器(Event View)程序简介 筛选Event Viewer中的事件 授予用户在本地登录的权利 使用Windows NT诊断程序查看系统配置 激活...
  • 按自定义规则对导入进行分组和排序,包括按路径或名称排序。 删除重复的和未使用的名称以及可配置的例外。 忽略配置或内联注释中的文件或声明。 遵守和规则。 尊重和配置。 保留'use strict' , ///指令,...
  • 今天在用Windows部署JAVA项目,总结下 1.部署步骤:a.配置基础环境三件套,jdk ,数据库,Tomcat。...在运行时需要注意如下几个地方:字符集要选择utf8,排序规则要选择utf8_estonian_ci.至于为啥要选择这两...
  • Windows Server 2012/2008/2003和Windows 10/8/7 / Vista / XP兼容。 选项来恢复已删除的记录。 选择将修复的数据库保存到Live数据库。 选择将修复的数据库保存为CSV,HTML和XLS。 软件特色 - 修复损坏...
  • 《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...
  • 《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑ 本书全面地介绍了windows server 2008命令行、powershell和脚本的使用,包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理...
  • error 63 2.13.4 #region和#endregion 63 2.13.5 #line 64 2.13.6 #pragma 64 2.14 C#编程规则 64 2.14.1 用于标识符的规则 64 2.14.2 用法约定 65 2.15 小结 71 第3章 对象和类型 ...
  • 有多个同名函数,对这些同名函数进行排序,排序规则如下(可参考接口wxb.Editor.Hotfix.getDelegateName的逻辑): 1 参数个数少的在前 2 进行字符串拼接,组成key值,规则如下"返回值全名 函数名(参数类型全名1,参数...
  • MySQL拾遗

    2011-06-19 18:13:00
    从文本文件中载入数据。文本的格式为:tab键为列间隔符,/n为行间隔符,w表示null值。 LOAD DATA LOCAL INFILE "xxx" ...排序规则(使用于order by):数值型 | 略过字符串型 | 第一个字符的字母表顺序日期型 | 按 年、月
  • mysql 配置可输出表情

    2020-05-30 15:52:54
    1. 需要保存特殊表情的字段 设置 编码格式 utf8mb4 排序规则为utf8mb4_unicode_ci 2. mysql数据库修改配置文件windows下)my.ini (linux 下)my.conf 添加如下配置: [mysqld] character-set-server = utf8mb4 ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 227
精华内容 90
关键字:

windows文件排序规则