需求:
”E:/data/”目录下有四个文件夹,如下:
每个文件夹下有几个.csv文件,如下:
将每个文件夹下的.csv文件合并成一个以该文件夹命名的.csv文件。
做法:
找到“E:/data”这个目录,循环读取目录下的四个文件夹;
针对每个文件夹,循环读取目录下的文件列表;
将读取的文件写入要合并的文件中。
代码:
public class FileOperation {
public static void main(String[] args) {
combine();
}
private static void combine() {
File files = new File("E:/data/");
String directory1[] =files.list();
for(int x=0;x<directory1.length;x++){
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
FileWriter fw = new FileWriter("E:/data/"+directory1[x]+".csv",true);
bufw = new BufferedWriter(fw);
File fs = new File("E:/data/"+directory1[x]);
String directory2[] = fs.list();
for(int i=0;i<directory2.length;i++){
File f = new File("E:/data/"+directory1[x]+"/"+directory2[i]);
FileInputStream fi = new FileInputStream(f);
InputStreamReader read = new InputStreamReader(fi, "GBK");
bufr = new BufferedReader(read);
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
if(fi!=null)
fi.close();
if(read!=null)
read.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(bufr!=null)
bufr.close();
if(bufw!=null)
bufw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
该代码已解决中文乱码问题。
小知识:
列出目录下所有内容:
File files = new File("E:/data/");
String directory[] =files.list();
上述两行代码列出了”E:/data”目录下的所有内容。