我在一个路径下有1000个文件
依次为1,2,3,4,5...........1000我是用了
File f = new File(path);
File[] t = f.listFiles(); 这个方法来读取这个路径下的文件
但是最后结果顺序为
1,10,100,1000,101...我怎么做才能让它读取的顺序为1,2,3......1000?

解决方案 »

  1.   

    错误原因分析:
    File[] t = f.listFiles();//创建数组,未排序
    String[] strArray = {"11","1","2","12"};
    Arrays.sort(strArray);//调用此方法,实现默认排序
    for(int i=0;i<strArray.length;i++){
    System.out.println(strArray[i]); //1 11 12 2
    }
    说明:字符串排序是按首字母比较第一位,相同再比较第二位,依次类推,所以产生了一述结果
    那么如何才能改变默认排序呢?
    public class StringComparetor implements Comparator<String>{
    @Override
    public int compare(String o1, String o2) {
    int i1 = Integer.parseInt(o1);
    int i2 = Integer.parseInt(o2);
    if(i1>i2){
    return 1;
    }else if(i1<i2){
    return -1;
    }
    return 0;
    }
    }说明:定义一个实现了Comparator接口的类,它是对排序规则的定义,具体应用规则到网上去查一下就可以了,很多的
    String[] strArray = {"11","1","2","12"};
    Arrays.sort(strArray,new StringComparetor());//自定义排序
    for(int i=0;i<strArray.length;i++){
    System.out.println(strArray[i]);//1 2 11 22
    }
    得到了我们想要的结果,针对于你的问题,我写的一个实例,你直接贴到你的代码中就可以用了:
    import java.io.File;
    import java.util.Comparator;
    public class FileComparator implements Comparator<File> { @Override
    public int compare(File file01, File file02) {
    System.out.println();
    int file01name = Integer.parseInt(file01.getName().substring(0,file01.getName().indexOf('.')));
    int file02name = Integer.parseInt(file02.getName().substring(0,file02.getName().indexOf('.')));
    if(file01name>file02name){
    return 1;
    }else if(file02name<file02name){
    return -1;
    }
    return 0;
    }}import java.io.File;
    import java.util.Arrays;
    public class SortTest { public static void main(String[] args){
    File file = new File("f:/test");
    File[] files = file.listFiles();
    Arrays.sort(files,new FileComparator());
    for(int i=0;i<files.length;i++){
    System.out.println(files[i].getName());
    }
    }
    }
      

  2.   

    lz可以参考
    http://topic.csdn.net/t/20030108/10/1337549.html
    -