做实习到现在快两年了,一只没弄清。明天研究一下,先记个问题在这。
翻阅Thinking in java,第十八章中记载,根据其记载所翻译。
现在有很多不同的I/o系统,正说明了创建一个好的I/O系统是一项艰难的任务。挑战来源于涵盖所有可能性:存在I/O源端和与之通信的接收端(文件,控制台,网络连接),还要以多种方式与他们通信(顺序,随机存储,缓冲,二进制按字符,按行,按字)。
在学习I/O系统之前,我们必须学相当多的类。
2.File类,处理文件目录。
3.File类除了代表一个特定文件,还代表一个目录下的一组文件。调用list()返回目录下的文件集。
4.FileNameFilter接口,实现里面的accept方法以区分不同的文件类型。
5.使用java.util.Arrays.sort(数组,String.CASE_INSENSITIVE_ORDER)方法排序,按字母排序。 list()会对文件目录下的每个对象调用accept,判断其是否包含在内。
目录实用工具:(在文件集上执行操作)下面一个实用工具类通过local()产生本地文件构成的File对象数组,使用walk产生的List<File>
//工具类名称
class Directory{
//如果只是需要返回需要的file数组对象
local(String name,String regex){
return local(new File(nam),regex);
}
public static file[] local(File file,String regex){
return file.listFiles(new FileNameFilter(){
private Pattern pattern = Pattern.compile{regex];
public boolean accept(File dir Striing name){
return pattern.matcher(new File(name).matches());
}
});
}
//实现iterable<?>接口必须要实现iterator(),返回iterator对象。
static classs TreeInfo impleents Iterable<File>{
public ArrayList<File >dirFiles = new ArrayList<File>();
ArrayList<File> lists = new ArrayList<File>();
iterator<File> iterator(){
//ArrayList已经实现了iterator的接口,并实现了next()和hasNext()。采用代理模式,A类中返回B类方法。
return lists.itorator()}
}
//if 是目录,采用这个方法。
//参数是treeInfo本身,将目录下的文件放入上层文件。
public void addAll(treeInfo other){
dirFiles.addAll(other.dirFiles;)
lists.addAll(other.lists);
}
//返回TreeInfo的实例对象
static TreeInfo walk{ return recurse()}
//可能有许多参数,所有有很多walk方法。
但都只有一个最终方法,它要求参数1是FIle,参数2是正则表达式。从第一个遍历,看是否文件目录,是的话循环递归遍历,不是的话加入对象lists里。
private TreeInfo recurse(File startDir,String regex){
TreeInfo treeInfo = new TreeInfo (){};
//file.isDirectory()和isFile()方法我一直搞不懂 如果是文件的话,文件里面肯定要装东西,那些东西不也是文件吗? 而isDirectory下面也是文件,那么这两个方法有什么区别呢???
for(File item:startDir.listFiles())
if(startDir.isDirectory()){
treeInfo.dirFiles.add(item);
treeInfo.addAll(recurse(item,regex));
else{
if(满足正则)
treeInfo.lists.add(item);
}
return treeInfo;
}
}
}
}