您的位置:首页 > 编程语言

实用代码

2016-01-27 23:29 302 查看
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+" 秒");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 代码