今天boss说项目需要审核,需要将代码拷贝到文档中,一个个拷贝嫌麻烦,再说还有那么多项目,于是就写个小工具遍历项目目录下所有.java .xml并输出txt文档中
<1>首先查资料,怎么让java程序在windows上跑起来,大概是让你将java程序导出成jar包再使用工具转化成exe可运行程序,感觉步骤繁琐,且不利于编程就放弃
<2>上一种方法不行就只有自己想思路啦,(这就苦逼啦),恰巧最近使用bat命令于是就有思路啦,还记得当初学习java时配置环境变量后的两个命令吗,没错就是javac,和java ,有了这两个命令就可以这届编写一个带有main方法的java直接运行啦
<3>开始编写java文件(直接贴代码啦,感觉废话太多)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.concurrent.Executors;
public class Main {
private static int allLines = 0;
private static String outputFileNane = "output/output.txt";
public static void main(String[] args) {
Executors.newCachedThreadPool().execute(new Runnable() {
@Override
public void run() {
File dir = new File("in");
if (dir.exists()) {
for (File file : dir.listFiles()) {
scanDirNoRecursion(file);
}
}
}
});
}
public static void readFile(File file) {
if (file.exists()) {
String fileName = file.getName();
if (fileName.endsWith(".java") || fileName.endsWith(".xml")) {
BufferedWriter bw = null;
BufferedReader br = null;
try {
bw = new BufferedWriter(new FileWriter(outputFileNane, true));
bw.write(fileName);
bw.newLine();
bw.flush();
br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
allLines++;
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
public static void writeLines() {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(outputFileNane, true));
bw.newLine();
bw.write("all lines:" + allLines);
bw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static ArrayList<String> filter = new ArrayList<String>();
static {
filter.add(".settings");
filter.add("assets");
filter.add("gen");
filter.add("libs");
filter.add("bin");
filter.add(".gradle");
filter.add(".idea");
filter.add(".gradle");
filter.add("build");
filter.add("gradle");
}
public static void scanDirNoRecursion(File dir) {
LinkedList<File> list = new LinkedList<File>();
if (dir.exists()) {
outputFileNane = "output/"+dir.getName() + ".txt";
File file=new File(outputFileNane);
if(file.exists()){
file.delete();
}
File[] files = dir.listFiles();
int length1 = files.length;
for (int i = 0; i < length1; i++) {
if (files[i].isDirectory() && !filter.contains(files[i].getName())) {
list.add(files[i]);
} else {
readFile(files[i]);
}
}
File tmp;
while (!list.isEmpty()) {
tmp = (File) list.removeFirst();
if (tmp.isDirectory()) {
files = tmp.listFiles();
if (files == null)
continue;
int length2 = files.length;
for (int i = 0; i < length2; i++) {
if (files[i].isDirectory() && !filter.contains(files[i].getName()))
list.add(files[i]);
else {
readFile(files[i]);
}
}
}
}
}
writeLines();
}
}
<4>主体就是三个方法一个scanDirNoRecursion(File dir)用于遍历目录,一个readFile(File file) 用于读取文件内容到输出文件中,还有用于统计总行数的方法。最后工具的目录结构如下:
<5>使用方法:在in目录中放入需要遍历的项目,点击bat会在output中会输出对应文件bat代码为:
javac Main.java
java Main