欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java合并一个文件夹下所有txt文件,输出到另一个txt

程序员文章站 2023-09-28 18:28:37
最近写了个单元测试,递归调用方法,把同一个文件夹里所有的txt合并输出到一个txt文件。参考了两个博客,分别是已有的方法,还有个就是检测txt文件所用编码的技术贴。如果不检测txt文件的编码,那么转换出的txt文件大概率会乱码。一开始尝试UTF-8和GBK等编码格式转换后都是乱码,一度以为是方法的问 ......
最近写了个单元测试,递归调用方法,把同一个文件夹里所有的txt合并输出到一个txt文件。参考了两个博客,分别是已有的方法,还有个就是检测txt文件所用编码的技术贴。如果不检测txt文件的编码,那么
转换出的txt文件大概率会乱码。一开始尝试utf-8和gbk等编码格式转换后都是乱码,一度以为是方法的问题。后来检测到原txt的编码是
utf-16le。。。这才转换成功。

第一部分是参考了https://www.cnblogs.com/braveym/p/10810153.html,加入了递归调用

import java.io.*;

public class txtcombination {
public static void main(string[] args) throws ioexception {

string originpath = "c:\\test\\help";
textcombiner(new file(originpath));
}

/**
* 递归调用该方法,当目录下无文件夹时,输出当前目录下所有txt文件,合并为一个txt文件,文件名由父文件夹名连接而成
* @param
*/
public static void textcombiner(file file) throws ioexception{
//首先判断传入的参数是不是纯文件夹(无子文件夹)
boolean dirflag = false;
for (file temp : file.listfiles()) {
if (temp.isdirectory()) {
dirflag = true;
textcombiner(temp);
}
}

if (dirflag) {
return;
}
string directorypath = file.getabsolutepath().replace("c:\\test\\help\\","").replace("\\", "-");

// string joinedname = string.join("-", split);
//定义输出目录
string fileout="d:\\mycode\\sbgong\\output\\"+ directorypath;
// new file(fileout).mkdirs();
string filepath = fileout + ".txt";
new file(filepath).createnewfile();
bufferedwriter bw=new bufferedwriter(new filewriter(filepath));
file[] listfiles = new file(file.getabsolutepath()).listfiles();
for (file child : listfiles) {
if (child.isfile() && child.getname().endswith("txt")) {
//不加编码的格式,读取的内容很有可能是乱码的
// bufferedreader br = new bufferedreader(new filereader(child));
bufferedreader br = new bufferedreader(new inputstreamreader(
new fileinputstream(child),"utf-16le"));
string line;
while((line=br.readline())!=null) {
bw.write(line);
bw.newline();
}
br.close();
}
}
bw.close();
}
}

第二部分:
参考https://blog.csdn.net/yili0000a/article/details/82703296