最近公司需要对原先的代码做规范,其中有个问题是需要为程序添加注释,注释的内容为版本说明、版本号、生产日期、作者、内容、功能等。因为手动加比较费事,就考虑用程序自动添加上去。
解决步骤:
1.扫描目录下面的所有文件,凡是后缀为java的就存放起来。如果扫描到的是目录就继续往下扫描,这里需要写递归函数。
2.已经获取到文件的地址,接下来就将文件的内容读取出来,一旦解析到第一行以package开头,就说明未添加到注释,这时候用到RandomAccessFile类将注释模板写入文件里面。需要注意的是读取内容出来后,需要重新定位到第一行。
/**
* Copyright (C), 2020-2020, Godsname Tech. Co., Ltd.
*/
package com.text;
import java.io.*;
import java.util.ArrayList;
import java.util.*;
/**
* 注释规范
* 为Java文件头部加上注释
*
* 例如 : Copyright (C), 2020-2020, Godsname Tech. Co., Ltd.
*
* @author Godsname
* @since 2020-04
*/
public class AnnotationSpecifications {
//扫描的文件目录
static final String PATH = "C:\\Users\\Administrator\\IdeaProjects\\hadoop\\src\\main\\java\\com\\text";
//为表头添加的注释
static final String CONTENT = "/**\n" +
" * Copyright (C), 2020-2020, Godsname Tech. Co., Ltd.\n" +
" */\n" +
"\r";
public static void main(String[] args) {
List<String> fileList = new ArrayList<String>();
getFilesPath(PATH,fileList);
putContentToFiles(fileList);
}
/**
* 将注释内容放入java文件里面
*
* @param list java文件的绝对地址
*/
public static void putContentToFiles(List<String> list){
for(String filePath : list){
try {
FileReader fileReader = new FileReader(filePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
if(bufferedReader.readLine().indexOf("package")>=0){
File temp = File.createTempFile("temp",null);
RandomAccessFile raf = new RandomAccessFile(filePath,"rw");
FileOutputStream fileOutputStream = new FileOutputStream(temp);
FileInputStream fileInputStream = new FileInputStream(temp);
raf.seek(0);
byte[] buff = new byte[1024];
int hasRead = 0;
while((hasRead = raf.read(buff)) > 0){
fileOutputStream.write(buff,0,hasRead);
}
raf.seek(0);
raf.write(CONTENT.getBytes());
while((hasRead = fileInputStream.read(buff))>0){
raf.write(buff,0,hasRead);
}
fileReader.close();
bufferedReader.close();
raf.close();
fileInputStream.close();
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 扫描文件夹下面的所有文件
*
* @param filePath 文件夹地址
* @param list 存放获取的所有文件地址
* @return boolean
*/
public static void getFilesPath(String filePath,List<String> list){
File file = new File(filePath);
if(!file.isDirectory() && file.getName().endsWith("java")){
list.add(file.getPath());
}else if(file.isDirectory()){
String[] fileList = file.list();
for(int i = 0;i<fileList.length;i++){
File readFile = new File(filePath + "\\" + fileList[i]);
if(!readFile.isDirectory() && readFile.getName().endsWith("java")){
list.add(readFile.getPath());
}else if(readFile.isDirectory()){
getFilesPath(filePath + "\\" + fileList[i],list);
}
}
}
}
}