您的位置:首页 > 其它

文件类功能 与 排序类功能 汇总总结

2015-07-19 04:54 281 查看
依照一定的规则处理指定目录下文件。

1.获取指定目录下所有文件。参见:http://blog.csdn.net/lj_pyt/article/details/44830761
publicclassjava.io.FileimplementsSerializable,Comparable<File>主要涉及了文件与文件夹路径操作。

String[]list(FilenameFilterfilter)

FilenameFilterfilter是一个目录过滤器。list(FilenameFilterfilter)方法会选择符合条件的文件或文件夹。

<spanstyle="font-size:12px;">publicString[]list(FilenameFilterfilter){ Stringnames[]=list();//首先还是调用list()方法,获取指定目录下的全部文件(夹)名字 if((names==null)||(filter==null)){filter==null说明没有过滤条件 returnnames; } ArrayListv=newArrayList(); for(inti=0;i<names.length;i++){//遍历names[]数组中的所有文件(夹)名字 if(filter.accept(this,names[i])){//如果accept()方法返回真,则添加到ArrayList中 v.add(names[i]); } } return(String[])(v.toArray(newString[v.size()]));//将ArrayList转换成String[]类型返回 } </span><spanstyle="font-size:12px;">publicFile[]listFiles(FilenameFilterfilter){ Stringss[]=list(); if(ss==null)returnnull; ArrayListv=newArrayList(); for(inti=0;i<ss.length;i++){ if((filter==null)||filter.accept(this,ss[i])){ v.add(newFile(ss[i],this)); } } return(File[])(v.toArray(newFile[v.size()])); }</span>list()和listFiles()方法的区别在于:
list()返回的是一个String类型数组,它只是一个数组,仅仅只是一个文件(文件夹)的名字而已;

而listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法。

使用FileNameFilter匿名类完成目录下文件选择。

privateFileGetOneFile(StringlogDir2){ //TODOAuto-generatedmethodstub Filedir=newFile(logDir2); if(dir!=null&&dir.isDirectory()){ /*。*/  String[]sfs=dir.list(newFilenameFilter(){ publicbooleanaccept(Filedir,Stringname){  //TODOAuto-generatedmethodstub returnname.endsWith(".log");  } }); returnsfs[0]; } }
2.对目录下文件进行排序,返回“符合条件”的。

Java中有一个Arrays类,专门用来操作array。(注意Arrays与Array的不同)

Arrays中拥有一组static函数,

equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill():将值填入array中。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。
System.arraycopy():array的复制。

Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。

相当于对Array进行类似操作的类——Arrays。

如,Collections.max(Collectioncoll);取coll中最大的元素。Collections.sort(Listlist);对list中元素排序.

排序方法:

2.1数组排序(Arrays.sort)


数字排序

int[]intArray=newint[]{4,1,3,-23};
Arrays.sort(intArray);  输出:[-23,1,3,4]

字符串排序,先大写后小写

String[]strArray=newString[]{"z","a","C"};
  Arrays.sort(strArray);  输出:[C,a,z]

严格按字母表顺序排序,也就是忽略大小写排序Case-insensitivesort

String[]strArray=newString[]{"z","a","C"};
  Arrays.sort(strArray,String.CASE_INSENSITIVE_ORDER);  输出:[a,C,z]

反向排序,Reverse-ordersort

String[]strArray=newString[]{"z","a","C"};
  Arrays.sort(strArray,Collections.reverseOrder());  输出:[z,a,C]

忽略大小写反向排序Case-insensitivereverse-ordersort

String[]strArray=newString[]{"z","a","C"};

  Arrays.sort(strArray,String.CASE_INSENSITIVE_ORDER);

  Collections.reverse(Arrays.asList(strArray));输出:[z,C,a]

2.2list排序http://www.cnblogs.com/huangfox/archive/2012/07/05/2577306.html
list排序可以直接采用Collections的sort方法,也可以使用Arrays的sort方法,归根结底Collections就是调用Arrays的sort方法。

publicstatic<T>voidsort(List<T>list,Comparator<?superT>c){ Object[]a=list.toArray(); Arrays.sort(a,(Comparator)c); ListIteratori=list.listIterator(); for(intj=0;j<a.length;j++){ i.next(); i.set(a[j]); } }如果是自定义对象,一种是实现Comparable接口使得对象自身就有“比较”的功能,另外一种是外部使用Comparator来规定其排序。

重写compare

List<User>us=newLinkedList<User>();

Collections.sort(us,newComparator<User>(){
@Override
publicintcompare(Usero1,Usero2){
if(o1.getAge()<o2.getAge())
return-1;
elseif(o1.getAge()>o2.getAge())
return1;
else
returno1.getName().compareTo(o2.getName());
}
});实现接口:

publicclassComparatorUserimplementsComparator{

publicintcompare(Objectarg0,Objectarg1){
Useruser0=(User)arg0;
Useruser1=(User)arg1;
//首先比较年龄,如果年龄相同,则比较名字
intflag=user0.getAge().compareTo(user1.getAge());
if(flag==0){
returnuser0.getName().compareTo(user1.getName());
}else{
returnflag;
}
}
}
XXXX
{
Listuserlist=newArrayList();

ComparatorUsercomparator=newComparatorUser();
Collections.sort(userlist,comparator);
}2.3set排序

set包括HashSet和TreeSet,HashSet是基于HashMap的,TreeSet是基于TreeMap的。

HashSet是基于Hash算法实现的,其性能通常优于TreeSet。我们通常都应该使用HashSet。

TreeMap是用红黑树实现,天然就具有排序功能,“天然就具有排序功能”是指它拥有升序、降序的迭代器。

那么HashSet怎么排序呢?我们可以将HashSet转成List,然后用List进行排序。

//set->array


通过查看它的构造方法就知道可以传入一个比较器。

2.4map排序

map包括HashMap和TreeMap,上面已经提过,TreeMap用红黑树实现,天然具有排序功能。

那么HashMap怎么按“key”排序呢?方法很简单,用HashMap来构造一个TreeMap。

us.put(
"f1"
,
12
);


将map的Entry提出成set结构,然后将set转成list,最后按照list进行排序。

本例中的是实现:

String[]sfs=dir.list(newFilenameFilter(){
publicbooleanaccept(Filedir,Stringname){
//TODOAuto-generatedmethodstub
returnname.endsWith(".log");
}
});
if(sfs.length>0){
Arrays.sort(sfs,String.CASE_INSENSITIVE_ORDER);
//java.util.List<String>filenames=Arrays.asList(sfs);
returnnewFile(logDir2+"/"+sfs[0]);
}

--------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: