本文內容
- java實現復制某文件夾下所有文本信息到指定目錄指定文件內
- 此工具還有諸多不足和可以優化的地方,所以暫命名為0.1版
- 可能優化的方向:對于字符編碼集的靈活設置等等
前置知識
- IO流
- Exception
- Scanner
- Eclipse/IDEA等工具
問題
- 目標文件為無后綴名文本文件.需要把這些相似類型的文本文件內容合并成一個文件
- 有諸多文件,其中文件中包含gpg加密文件(無用,需要刪掉)
- 刪除文件以及通過搜索欄剪切粘貼后會有很多空文件夾需要刪除(我不想手動刪除空文件夾,我懶)
- 文本信息之間不能空行
- 手動復制的話,估計能把人累死,更主要的是身為一名程序員還要做低級的重復性勞動很丟人.
解決思路與步驟
- 將所有壓縮文件解壓后刪除,新建文本文件,輸入
del D:\files\*.gpg /f /s /q
然后重命名文件名為del_gpg.bat 雙擊運行,刪除此處無用的gpg文件。此時,只有目標類型的文件。
- 在搜索欄出,搜索出所有相似命名格式的文件,全選,然后剪切到某文件夾下.處理完畢后新建文本文件,寫入以下批處理命令,刪除空文件夾
@echo off
for /f "delims=" %%a in ('dir /ad /n /s D:\file\^|sort /r' ) do (
rd "%%a">nul 2>nul &&echo the null dir"%%a" is deleted!
)
pause
- 此時編寫java實現方法,將指定文件復制到指定目錄下的指定文件中(注意文件后綴)
其實核心思想就是,讀取一個文件夾下的每個文本文件,對于文本信息逐條復制粘貼到新文件中
基于java語言的實現源碼如下
package utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class CopyTextToOne {
/**
* 復制
* @param outFilePathAndFileName
* @param Dir
* @return
* @throws IOException
*/
public static boolean copyTextToOne(String outFilePathAndFileName,String Dir) throws IOException{
boolean result = false;
int count=0;
List<File> fileList=getFiles(Dir);
File outFile=new File(outFilePathAndFileName);
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream(outFile),"GBK");
for (File file : fileList) {
InputStreamReader inputStreamReader=new InputStreamReader(new FileInputStream(file),"GBK");
BufferedReader bfr=new BufferedReader(inputStreamReader);
String line_record=bfr.readLine();
while(line_record!=null) {
System.out.println(line_record);
outputStreamWriter.append(line_record);
outputStreamWriter.append("\r\n");//換行
count+=1;
line_record=bfr.readLine();
}
System.out.println("本次共合并"+count+"條數據");
inputStreamReader.close();
}
outputStreamWriter.close();
result=true;
return result;
}
/**
* 獲取文件
* @param path
* @return
*/
private static List<File> getFiles(String path) {
File root=new File(path);
List<File> fileList=new LinkedList<File>();
if(!root.isDirectory()) {
fileList.add(root);
}else {
File[] subFiles=root.listFiles();
for (File file : subFiles) {
fileList.addAll(getFiles(file.getAbsolutePath()));
}
}
return fileList;
}
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner=new Scanner(System.in);
while(true) {
System.out.println("歡迎使用文本合一工具 version 0.1");
System.out.println("1.合并");
System.out.println("2.退出");
int menu=scanner.nextInt();
if(!(menu==1||menu==2)) {
System.out.println("輸入錯誤,請重新輸入");
}
if(menu==1) {
System.out.println("請輸入要輸出的文件路徑以及文件名稱");
String outFilePathAndFileName=scanner.next();
System.out.println("請輸入要合并文件所在文件夾");
String Dir=scanner.next();
try {
copyTextToOne(outFilePathAndFileName,Dir);
} catch (IOException e) {
e.printStackTrace();
}
}
if(menu==2) {
System.out.println("已退出,感謝使用");
break;
}
}
}
}
文件1
文件2
合并文件控制臺.png
結果文件