实用代码

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值