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

用java实现将一个项目中所有的.java文件合并输出至某文件

2013-03-04 21:52 781 查看
今天遇到了一个实际的问题,想把以前做的项目中所有的代码输出到一个txt文件中,想到以前看马士兵的视频教程时曾经跟着写过一个统计代码的小程序,在另一篇博文中会写出其代码,修改后实现了该功能。

整体思路就是利用I/O流,当输入一个文件夹路径时,若它还含有子目录,则递归该文件夹直到不含目录,然后将java源文件中的代码挨行读取,写入一个特定的txt文件。

注意两点:

1.目录中可能含有子目录,因此需要递归

2.在将每个java源文件中的代码写入txt文件时,需要在该txt文件后面添加,因此用到了FileWriter带参数true的构造函数,表示可以在文件后面添加内容

代码如下:

import java.io.*;
import java.util.regex.*;

/**
* 合并一个项目中所有java源文件的代码至一个txt文件
* @author ybsun
* 20130304
*/
public class codeMerge {
public static void main(String[] args)
{
File folder = new File("D:\\test");//要统计代码的工程路径
File outFile = new File("d:\\out.txt");//输出目标文件

recur(folder, outFile);
System.out.println("merge done");
}

/**
* 递归工程目录,找到所有的java源文件并合并输出
* @param file 源代码目录或文件
* @param outFile 目标txt文件,本方法中用它参数完全是因为merge方法需要该参数
*/
public static void recur(File file, File outFile)
{
File[] files = file.listFiles();
for(int i=0; i<files.length; i++)
{
//如果files[i]为目录,则递归,直到最里面那一层
if(files[i].isDirectory() == true)
{
recur(files[i], outFile);
}
//如果files[i]为文件且为java源文件,则读取其代码并合并 用到了正则表达式
else if((files[i].isFile()==true) && files[i].getName().matches(".*\\.java$"))
{
merge(files[i], outFile);
}
}
}

/**
* 读取java源文件中的每一行代码,输出至目标文件
* @param file 要读取的java源文件
* @param outFile 目标文件 .txt文件
*/
public static void merge(File file, File outFile)
{
//缓冲输出和输入流
BufferedWriter bw = null;
BufferedReader br = null;

try {
//注意此处用了FileWriter带参数true的构造方法,这样才能在.txt文件的末尾加入内容,否则会覆盖其以前的内容
bw = new BufferedWriter(new FileWriter(outFile, true));
br = new BufferedReader(new FileReader(file));

//读取一个文件第一行代码之前,先在.txt文件中做好标记,表明此处是哪个源文件
bw.newLine();
bw.write("读取文件" + file.getName());
bw.newLine();

String line = "";
while((line=br.readLine()) != null)
{

bw.write(line);//挨行从源文件读取并写入目标文件
bw.newLine();
bw.flush();
}

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally
{
try {
if(bw != null)
{
//注意:此处的两句代码不能调换,若bw=null在前,则会出现空指针错误
bw.close();
bw = null;
}
if(br != null)
{
br.close();
br = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐