《TIJ》第11章练习7
复习list的排序,函数重载以及藜取文件大小的方法。
7、撰写一个SortedDirList class,令其构造函数可以接收文件路径,并能够产生该路径下的所有文件的名称排序列表。撰写两个重载的list(),根据引数,产生整份列表或只产生列表的部分内容。再增加一个size(),令它接受一个文件名,并返回文件大小。
注:产生的list似乎即使不使用Arrays.sort()进行排序,也会自动按文件名称进行排序。
import java.io.*;
import java.util.*;
public class SortedDirList {
String dir;
File path;
public SortedDirList(String dir){
this.dir = dir;
path = new File(dir);
}
void list(){
String[] list = path.list();
Arrays.sort(list, new AlphabeticComparator());
for(int i = 0; i < list.length; i++)
System.out.println(list[i]);
}
void list(String ext){
String[] list = path.list(new DirFilter(ext));
Arrays.sort(list, new AlphabeticComparator());
for(int i = 0; i < list.length; i++)
System.out.println(list[i]);
}
long size(String fileName){
File file = new File(dir + "/" + fileName);
return file.length();
}
/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) {
// TODO: Add your code here
if(args.length == 0)
{
SortedDirList sdl = new SortedDirList(".");
sdl.list();
System.out.println("\n");
sdl.list("txt");
System.out.println("\n");
System.out.println( sdl.size("SortedDirList.java") );
}
else if(args.length == 3)
{
SortedDirList sdl = new SortedDirList(args[0]);
sdl.list();
System.out.println("\n");
sdl.list(args[1]);
System.out.println("\n");
System.out.println( args[2] + "'s size: " +
sdl.size(args[2]) + "byte" );
}
else
{
System.out.println("参数不正确。");
}
}
}
class DirFilter implements FilenameFilter {
String afn;
DirFilter(String afn) {
this.afn = afn;
}
public boolean accept(File dir, String name) {
String f = new File(name).getName();
return f.indexOf(afn) != -1;
}
}
class AlphabeticComparator implements Comparator {
public int compare(Object o1, Object o2) {
String s1 = (String)o1;
String s2 = (String)o2;
return s1.toLowerCase().compareTo(s2.toLowerCase());
}
}