greensure 2016-05-19 12:41 采纳率: 100%
浏览 2760
已采纳

java 遍历本地目录中文件(文件数量比较大),for循环按id顺序

java 遍历本地目录中文件(文件数量比较大),for循环按id顺序得到的结果为什么是1,10,100,101,102,...,109,11......
我希望得到的文件按顺序是从1依次递增到最后,及Log_1.a,Log_2.a,Log_3.a,Log_4.a……

FileName: Log_1.a
FileName: Log_10.a
FileName: Log_100.a
FileName: Log_101.a
FileName: Log_102.a
FileName: Log_103.a
FileName: Log_104.a
FileName: Log_105.a
FileName: Log_106.a
FileName: Log_107.a
FileName: Log_108.a
FileName: Log_109.a
FileName: Log_11.a
FileName: Log_110.a
FileName: Log_111.a
FileName: Log_112.a
FileName: Log_113.a
FileName: Log_114.a
FileName: Log_115.a
FileName: Log_116.a
FileName: Log_117.a
FileName: Log_118.a
FileName: Log_119.a
FileName: Log_12.a
FileName: Log_120.a
FileName: Log_121.a
FileName: Log_122.a
FileName: Log_123.a
FileName: Log_124.a
FileName: Log_125.a
FileName: Log_126.a
FileName: Log_127.a
FileName: Log_128.a
FileName: Log_129.a
FileName: Log_13.a
FileName: Log_130.a
FileName: Log_131.a
FileName: Log_132.a

  • 写回答

7条回答 默认 最新

  • sxwws 2016-05-20 07:05
    关注

    帮你写了个完整的程序,拿去用吧。

    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;

    public class Test4 {

    class DirFilter implements FilenameFilter {
    
        public String suffix = null;
        public String endwith = null;
    
        public boolean accept(File dir, String name) {
    
            //return (name.toLowerCase().contains(suffix)) && (name.toLowerCase().endsWith(endwith));
            return (name.contains(suffix)) && (name.contains(endwith));
        }
    
        public void SetSuffix(String suffixStr) {
            suffix = suffixStr;
        }
    
        public void SetEndWith(String endWtihStr) {
            endwith = endWtihStr;
        }
    
    }   
    
    public class SelfComparator implements Comparator<File> {
    
        public int compare(File o1, File o2) {
            return  Integer.valueOf(getNum(o1.getName())).compareTo(Integer.valueOf(getNum(o2.getName()))); 
        }
    
        public int getNum(String filename){
            int num;
            String numStr= filename.substring("Log_".length(), filename.indexOf(".a"));
            if ("".equals(numStr)){
                num=0;
            }else{
                num=Integer.parseInt(numStr);
            }
            return num;
        }
    }
    
    public void excute() {
        File dir = new File("D://directory");
        DirFilter difFilter = new DirFilter();
        difFilter.SetSuffix("Log_");
        difFilter.SetEndWith(".a");
        File[] files = dir.listFiles(difFilter);
        if (files.length <= 1) {
            return;
        } else {
            List<File> fileList = new ArrayList<File>();
            fileList.addAll(Arrays.asList(files));
            Collections.sort(fileList, new SelfComparator());
            int list_size = fileList.size();
            for (int i=0; i<list_size; i++) {
                System.out.println("filename is :" + fileList.get(i));
            }
        }
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test4 test = new Test4();
        test.excute();
    
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?