场景如下:
path1,path2为2个文件夹的目录,目录下有相同名的txt文件,但内容不同,需要将不同目录下,相同名字的文件内容合并。
比如:在目录path1下有文件
a.txt,内容如下:
12
6
7
a.txt,内容如下:
3
4
8
9
合并之后,在目录path1下的a.txt,内容为:
1
2
3
4
6
7
8
9
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class HandleFile {
public static void mergeFileContent(String path1, String path2) throws IOException {
File f1 = new File(path1);
File f2 = new File(path2);
//返回该文件夹下所有文件的名称列表
String[] name1 = f1.list();
for(int m = 0; m < name1.length; m++) {
System.out.println(name1[m]);
}
String[] name2 = f2.list();
//list暂时存放path2下单个文件的内容
List list = new ArrayList();
for(int i=0; i<name1.length; i++){
for(int j=0; j < name2.length; j++) {
//判断2个文件夹中,文件是否同名;是,将文件2的内容,写入文件1;并且判断是txt文件
if( name1[i].equals(name2[j]) && name1[i].endsWith(".txt") ) {
try {
String path4 = path2 + name2[j];
File file2 = new File(path4);
BufferedReader bw;
bw = new BufferedReader(new FileReader(file2));
String line = null;
//先存入list集合中
while((line = bw.readLine()) != null) {
list.add(line);
}
//合并到文件1
String path3 = path1 + name1[i];
File file1=new File(path3);
BufferedWriter out=new BufferedWriter(new FileWriter(file1,true));
for (int k=0; k<list.size(); k++) {
out.write((String) list.get(k));
out.newLine();
}
list.clear();
bw.close();
bw=null;
file2=null;
out.close();
out=null;
file1=null;
//如果在目录1下,一个文件A在目录2下找到同名的文件A,就不继续在目录2下判断
break;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
//将文件名添加.txt
public static void suffixAdd(String path) {
//检查要重命名的文件是否存在,是否是文件
File file = new File(path);
if (!file.exists() || file.isDirectory()) {
File[] files = file.listFiles();//获取此目录下的文件列表
for (File fileFrom : files) {
String fromFile = fileFrom.getName();//文件名
String toFileName;
toFileName = fromFile + ".txt";
//获取文件的根路径
String rootPath = fileFrom.getParent();
//需要添加原根路径
File toFile = new File(rootPath + File.separator + toFileName);
System.out.println("修改后的文件名: " + toFile.getName());
if (fileFrom.exists() && !toFile.exists()) {
//开始更名
fileFrom.renameTo(toFile);
}
}
} else {
System.out.println("File does not exist: " + file);
return;
}
}
public static void main(String[] a) throws IOException{
//
String path1 = "e:\\merge\\test1\\";
String path2 = "e:\\merge\\test2\\";
mergeFileContent(path1, path2);
String path = "E:\\addtest\\";
suffixAdd(path);
}
}