zoukankan      html  css  js  c++  java
  • 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文件夹被删除:

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

  • 相关阅读:
    理解jquery的$.extend()、$.fn和$.fn.extend()
    Angularjs,WebAPI 搭建一个简易权限管理系统
    ASP.NET MVC Boilerplate简介
    写jQuery插件
    给Asp.Net MVC及WebApi添加路由优先级
    Oracle数据库之开发PL/SQL子程序和包
    Git 1.9.5.msysgit.1
    快速解读GC日志(转)
    Git & Github 一页简明笔记(转)main
    用python3.x与mysql数据库构建简单的爬虫系统(转)
  • 原文地址:https://www.cnblogs.com/tenWood/p/7466954.html
Copyright © 2011-2022 走看看