最近寫了個單元測試,遞歸調用方法,把同一個文件夾里所有的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