检查本科生大作业时,为了查重,写了个小程序自动将多个类的文本合并成一个文件,方便整体查重。
我的需求:用一个以学号命名的.java文件存储该生大作业的所有类中的代码。
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Merge {
public static void main(String [] args) throws Exception{
String folderPath = "C:\\Users\\53194\\Desktop\\aaa"; //写存储学号文件夹的绝对路径
List mergeList = getWriteFileList(folderPath); //读取文件夹中学生文件夹的名称并存储,方便后面建立.java文件
for(int i = 0; i < mergeList.size();i++){
String wTempPath = (String) mergeList.get(i);
File file = new File(wTempPath+".java"); //新建.java文件到原文件夹下,方便写入
file.createNewFile();
List fileList = getJavaFileList(wTempPath); //存储文件夹中所有的.java文件
for(int j = 0;j < fileList.size(); j++){
String temp = (String)fileList.get(j);
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(temp),"UTF-8"));
String readLine = br.readLine();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(wTempPath+".java",true),"UTF-8"));
while(readLine != null){
bw.write(readLine+"\r\n");
readLine = br.readLine();
}
br.close();
bw.flush();
bw.close();
}
}
}
public static List getJavaFileList(String path) { //获取所有的.java文件
List list = new ArrayList();
try {
File file = new File(path);
String[] filelist = file.list();
for (int i = 0,j=0; i < filelist.length; i++) {
if(filelist[i].contains(".java")) {
list.add(path+"\\"+filelist[i]);
j++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static List getWriteFileList(String path) { //获取写入路径
List list = new ArrayList();
try {
File file = new File(path);
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
list.add(path+"\\"+filelist[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
在读入流和写入流的编码格式那里,可以自己填写需要的格式,我这边有的学生用UTF-8导出是乱码,需要改为GBK重新导出一次。
还有很大完善空间,不过作为一次的小工具用可以了。
在此基础上做了优化版:https://blog.youkuaiyun.com/orangewyy/article/details/111773332
查重工具:https://blog.youkuaiyun.com/henu_1710252529/article/details/101130242