Java 下如何依次读取一个目录下的所有文件

mcolinc 2010-03-04 02:18:23
我在一个路径下有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?
...全文
93 2 打赏 收藏 转发到动态 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
JavaAlpha 2010-03-04
  • 打赏
  • 举报
回复
jxlstc 2010-03-04
  • 打赏
  • 举报
回复
错误原因分析:
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());
}
}
}
相关推荐

62,566

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告