实用代码

来源:互联网 发布:淘宝上新速度 编辑:程序博客网 时间:2024/04/30 18:50

1.统计编写的Java程序代码行数;2.文件拷贝
1.统计编写的Java程序代码行数

import java.io.*;import java.util.regex.Pattern;import net.two.Directory.TreeInfo;import java.util.*;class Directory {    public static File[] local(File dir,final String regex){        return dir.listFiles(new FilenameFilter(){            private Pattern pattern = Pattern.compile(regex);            public boolean accept(File dir,String name){                return pattern.matcher(new File(name).getName()).matches();            }        });    }    public static File[] local(String dir,final String regex){        return local(new File(dir),regex);    }    public static class TreeInfo implements Iterable<File>{        public List<File> files = new ArrayList<File>();        public List<File> dirs = new ArrayList<File>();        public Iterator<File> iterator(){            return files.iterator();        }        void addAll(TreeInfo other){            files.addAll(other.files);            dirs.addAll(other.dirs);        }    }    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),".*");    }       /**     * 遍历Java程序所在目录,     * @param startDir 起始路径     * @param regex 正则表达式,所要查找文件的格式     * @return     */     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 class CodeLinesData {    public static int num = 0;    public void getCodeLines(String file) throws IOException{        getCodeLines(new File(file));    }    public void getCodeLines(File file) throws IOException{        BufferedReader in = new BufferedReader(new FileReader(file));        while(in.readLine()!=null){            num++;        }        in.close();         }    public static void main(String[] args) throws IOException{        CodeLinesData cld = new CodeLinesData();                Directory d = new Directory();        List<File> files;        files = Directory.walk("E:\\Data\\Myeclipse", ".*\\.java").files;        Iterator<File> iterator = files.iterator();        while(iterator.hasNext()){            cld.getCodeLines(iterator.next());        }        System.out.println("总共写过:"+num+" 行代码");    }}

2.文件拷贝

import java.io.*;import java.nio.ByteBuffer;import java.nio.channels.*;public class CopyFile {    /*    * copy1()用时较copy2()长    */    public static void copy1(String fromFile,String toFile) throws IOException{            int bsize = 1024;        FileChannel                    fcin = new FileInputStream(fromFile).getChannel(),                   fcout = new FileOutputStream(toFile).getChannel();        ByteBuffer bf = ByteBuffer.allocate(bsize);        /*fcin.read(bf);        bf.flip();        while(bf.hasRemaining()){ //此处当文件大于BSIZE时,不能正确复制.            fcout.write(bf);        }*/         while(fcin.read(bf)!=-1){//fcin.read(bf):返回(return)读取到字节的大小,读完时返回-1.            bf.flip();//准备写            fcout.write(bf);            bf.clear();//准备读        }       }        /*        * copy2()用时最短        */    public static void copy2(String fromFile,String toFile) throws IOException{        //(2)利用通道        FileChannel                fcin = new FileInputStream(fromFile).getChannel(),               fcout = new FileOutputStream(toFile).getChannel();        fcin.transferTo(0, fcin.size(), fcout);        fcin.close();        fcout.close();    }    /*    * copy3()复制文件会出错    */    public static void copy3(String fromFile,String toFile) throws IOException{        BufferedReader in = new BufferedReader(new FileReader(fromFile));        BufferedWriter out1 = new BufferedWriter(new FileWriter(toFile));        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(toFile)));        StringBuilder sb = new StringBuilder();        try{            String s;            while((s=in.readLine())!=null){                sb.append(s+"\n");                out.println(s);            }        }finally{            in.close();            out.close();        }        out1.write(sb.toString());        out1.close();           }    public static void main(String[] args) throws IOException{        String fromFile = "D:\\研究\\AD量化误差抑制\\Bymyself\\test.doc";        String toFile = "F:\\data\\test\\copyof3_A Method.doc";        long start = System.currentTimeMillis();        //CopyFile.copy1(fromFile, toFile);        CopyFile.copy2(fromFile, toFile);//用时最短        //CopyFile.copy3(fromFile, toFile);        long time = System.currentTimeMillis()-start;        System.out.println("拷贝总共用时 "+time+" 秒");    }}
0 0
原创粉丝点击