文件类功能 与 排序类功能 汇总总结
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中元素排序.
排序方法:
数字排序
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进行排序。
通过查看它的构造方法就知道可以传入一个比较器。
2.4map排序
map包括HashMap和TreeMap,上面已经提过,TreeMap用红黑树实现,天然具有排序功能。
那么HashMap怎么按“key”排序呢?方法很简单,用HashMap来构造一个TreeMap。
将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]);
}
--------------------------------------------
1.获取指定目录下所有文件。参见:
publicclassjava.io.FileimplementsSerializable,Comparable<File>主要涉及了文件与文件夹路径操作。
String[]list(FilenameFilterfilter)
FilenameFilterfilter是一个目录过滤器。list(FilenameFilterfilter)方法会选择符合条件的文件或文件夹。
list()返回的是一个String类型数组,它只是一个数组,仅仅只是一个文件(文件夹)的名字而已;
而listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法。
使用FileNameFilter匿名类完成目录下文件选择。
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排序
list排序可以直接采用Collections的sort方法,也可以使用Arrays的sort方法,归根结底Collections就是调用Arrays的sort方法。
重写compare
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进行排序。
本例中的是实现:
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]);
}
--------------------------------------------
相关文章推荐
- PRPDebug
- 实践证明一个醒目的标题可以促进百度蜘蛛的喜好达到收录的目的
- 创建你的第一个JavaScript库
- csdn图片管理
- arcsde 0xc0000007b
- CentOS7 安装LNMP(Linux+Nginx+MySQL+PHP)
- mariadb galera集群配置
- Codeforces Gym 100187K K. Perpetuum Mobile 构造
- 交换两个变量,不使用第三个变量(js向)
- 面向对象之抽象和接口
- 面向对象之多态
- 面向对象之继承
- 面向对象之封装
- openssl构建CA认证
- ntop监控系统网络状态-安装配置
- Linux与Unix shell编程指南(完整高清版).pdf
- 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字
- 数学运算类和包装类
- Linux与Unix shell编程指南(完整高清版).pdf
- mysql-主从服务器同步搭建