ThinkJava-File类

1.1目录列表器:                  

package com.java.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;

public class DirList {
    public static void main(String[] args) {
        
        //System.out.println(System.getProperty("user.dir"));
        //E:workspaceworkspace for j2eeMyTest
        
        //“.”知识代表当前工作目录的意思,它是一个相对路径的写法
        File path = new File(".");        
        String [] list;
        if(args.length == 0){
            list = path.list();
        }else{
            list = path.list(new DirFilter(args[0]));
        }
        Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
        for(String dirItem : list){
            System.out.println(dirItem);
        }
    }
}

class DirFilter implements FilenameFilter{
    private Pattern pattern;
    public DirFilter(String regex){
        pattern = Pattern.compile(regex);
    }
    
    @Override
    public boolean accept(File dir, String name) {
        return pattern.matcher(name).matches();
    }
    
}

以参数:    .*.txt 运行,输出:

option.txt
test.txt
zip.txt

匿名内部类:

package com.java.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;

public class DirList2 {
    public static FilenameFilter filter(final String regex){
        return new FilenameFilter(){
            private Pattern pattern = Pattern.compile(regex);;
            
            @Override
            public boolean accept(File dir, String name) {
                return pattern.matcher(name).matches();
            }
        };
    }
    
    public static void main(String[] args) {
        File path = new File(".");        
        String [] list;
        if(args.length == 0){
            list = path.list();
        }else{
            list = path.list(filter(args[0]));
        }
        Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
        for(String dirItem : list){
            System.out.println(dirItem);
        }
    }
}

进一步修改,定义作为list()参数的匿名内部类,程序会变得更小:

package com.java.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;

public class DirList3 {
    public static void main(final String[] args) {
        File path = new File(".");        
        String [] list;
        if(args.length == 0){
            list = path.list();
        }else{
            list = path.list(new FilenameFilter(){
                private Pattern pattern = Pattern.compile(args[0]);
                
                @Override
                public boolean accept(File dir, String name) {
                    return pattern.matcher(name).matches();
                }
            });
        }
        Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
        for(String dirItem : list){
            System.out.println(dirItem);
        }
    }
}

 1.2目录实用工具                                  

package com.java.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;

import com.java.util.PPrint;

public final class Directory {
    /**
     * local方法使用listFiles()来产生File数组
     * 如果需要List而不是数组,你可以使用Arrays.asList()自己对结果进行转换。
     * @param dir
     * @param regex
     * @return
     */
    public static File[] local(File dir, final String regex){
        return dir.listFiles(new FilenameFilter(){
            private Pattern pattern = Pattern.compile(regex);
            @Override
            public boolean accept(File dir, String name) {
                return pattern.matcher(new File(name).getName()).matches();
            }
        });
    }
    
    public static File[] local(String path, final String regex){
        return local(new File(path), regex);
    }
    
    public static class TreeInfo implements Iterable<File>{
        public List<File> files = new ArrayList<File>();
        public List<File> dirs = new ArrayList<File>();
        
        @Override
        public Iterator<File> iterator() {
            return files.iterator();
        }
        
        void addAll(TreeInfo other){
            files.addAll(other.files);
            dirs.addAll(other.dirs);
        }

        @Override
        public String toString() {
            return "dirs:    " + PPrint.pformat(dirs) + "

files:    " + PPrint.pformat(files);
        }
    }
    
    public static TreeInfo walk(String start, String regex){
        return recurseDirs(new File(start), regex);
    }
    public static TreeInfo walk(File start, String regex){
        return recurseDirs(start, regex);
    }
    public static TreeInfo walk(File start){
        return recurseDirs(start, ".*");
    }
    public static TreeInfo walk(String start){
        return recurseDirs(new File(start), ".*");
    }
    
    static TreeInfo recurseDirs(File startDir, String regex){
        TreeInfo result = new TreeInfo();
        for(File item : startDir.listFiles()){
            if(item.isDirectory()){
                result.dirs.add(item);
                result.addAll(recurseDirs(item, regex));
            }else{
                if(item.getName().matches(regex)){
                    result.files.add(item);
                }
            }
        }
        return result;
    }
    
    public static void main(String[] args) {
        if(args.length == 0 ){
            System.out.println(walk("."));
        }else{
            for(String arg : args){
                System.out.println(walk(arg));
            }
        }
    }
    
}
View Code
package com.java.util;

import java.util.Arrays;
import java.util.Collection;

public class PPrint {
    public static String pformat(Collection<?> c){
        if(c.size() == 0){
            return "[]";
        }
        StringBuilder result = new StringBuilder("[");
        for(Object elem : c){
            if(c.size() != 1){
                result.append("
    ");
            }
            result.append(elem);
        }
        if(c.size() != 1){
            result.append("
");
        }
        result.append("]");
        return result.toString();
    }
    
    public static void pprint(Collection<?> c){
        System.out.println(pformat(c));
    }
    
    public static void pprint(Object[] c){
        System.out.println(pformat(Arrays.asList(c)));
    }
}
View Code

运行Directory.java:

 1.3目录的检查及创建                                

File类不仅仅只代表存在的文件或目录。也可以用File对象来创建新的目录或尚不存在的整个目录路径。我们还可以查看文件的特性(如:大小,最后修改日期,读/写) ,检查某个File对象代表的是一个文件还是一个目录,井可以删除文件。下面的示例展示了File类的一些其他方法

package com.java.io;

import java.io.File;

public class MakeDirectories {
    private static void usage() {
        System.err.println(
            "Usage:MakeDirectories pathl ...
" +
            "Creates each path
" +
            "Usage:MakeDirectories -d pathl ...
" +
            "Deletes each path
" +
            "Usage:MakeDirectories -r pathl path2
" +
            "Renames from pathl to path2");
            System.exit(1);
    }
    private static void fileData(File f) {
        System.out.println(
        "Absolute path: " + f.getAbsolutePath () +
        "
 Can read: " + f.canRead () +
        "
 Can write: " + f .canWrite() +
        "
 getName: " + f.getName() +
        "
 getParent: " + f.getParent() +
        "
 getPath: "+ f.getPath() +
        "
 length: " + f.length() +
        "
 lastModified: " + f.lastModified());
        if(f. isFile()){
            System.out.println("It's a file");
        }
        else if(f.isDirectory()){
            System.out.println("It's a directory");
        }
    }
    
    public static void main(String[] args) {
        if(args.length < 1) usage();
        if(args[0] .equals("-r")) {
            if(args.length != 3) usage();
            File old = new File(args[1]);
            File rname = new File(args[2]);
            
            //用来把一个文件重命名(或移动)别由参数所指示的另一个完愈不肉的薪路经(也就是另一个File对象)节窟。
            old.renameTo(rname);
            fileData (old);
            fileData(rname) ;
            return;
        }
        int count = 0;
        boolean del = false;
        if(args[0].equals("-d")) {
            count++;
            del = true;
        }
        count--;
        while(++count < args.length) {
            File f = new File(args[count]);
            if (f. exists()) {
                System.out. println(f + " exists") ;
                if (del) {
                    System.out.println("deleting...." + f);
                    f.delete();
                }
            }else{
                if(!del){
                    f.mkdirs();
                    System.out.println("created " + f);
                }
            }
            fileData( f) ;
        }
    }
}
View Code

运行参数:test:

运行参数:-r test test2

test文件夹被重命名为test2

运行参数 -d test2

test2文件夹被删除:

----------------------------

原文地址:https://www.cnblogs.com/tenWood/p/7466954.html