本文內(nèi)容
- java實(shí)現(xiàn)復(fù)制某文件夾下所有文本信息到指定目錄指定文件內(nèi)
- 此工具還有諸多不足和可以?xún)?yōu)化的地方,所以暫命名為0.1版
- 可能優(yōu)化的方向:對(duì)于字符編碼集的靈活設(shè)置等等
前置知識(shí)
- IO流
- Exception
- Scanner
- Eclipse/IDEA等工具
問(wèn)題
- 目標(biāo)文件為無(wú)后綴名文本文件.需要把這些相似類(lèi)型的文本文件內(nèi)容合并成一個(gè)文件
- 有諸多文件,其中文件中包含gpg加密文件(無(wú)用,需要?jiǎng)h掉)
- 刪除文件以及通過(guò)搜索欄剪切粘貼后會(huì)有很多空文件夾需要?jiǎng)h除(我不想手動(dòng)刪除空文件夾,我懶)
- 文本信息之間不能空行
- 手動(dòng)復(fù)制的話,估計(jì)能把人累死,更主要的是身為一名程序員還要做低級(jí)的重復(fù)性勞動(dòng)很丟人.
解決思路與步驟
- 將所有壓縮文件解壓后刪除,新建文本文件,輸入
del D:\files\*.gpg /f /s /q
然后重命名文件名為del_gpg.bat 雙擊運(yùn)行,刪除此處無(wú)用的gpg文件呆贿。此時(shí)菜职,只有目標(biāo)類(lèi)型的文件桐绒。
- 在搜索欄出,搜索出所有相似命名格式的文件,全選,然后剪切到某文件夾下.處理完畢后新建文本文件,寫(xiě)入以下批處理命令,刪除空文件夾
@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
- 此時(shí)編寫(xiě)java實(shí)現(xiàn)方法,將指定文件復(fù)制到指定目錄下的指定文件中(注意文件后綴)
其實(shí)核心思想就是,讀取一個(gè)文件夾下的每個(gè)文本文件,對(duì)于文本信息逐條復(fù)制粘貼到新文件中
基于java語(yǔ)言的實(shí)現(xiàn)源碼如下
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 {
/**
* 復(fù)制
* @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+"條數(shù)據(jù)");
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("輸入錯(cuò)誤,請(qǐng)重新輸入");
}
if(menu==1) {
System.out.println("請(qǐng)輸入要輸出的文件路徑以及文件名稱(chēng)");
String outFilePathAndFileName=scanner.next();
System.out.println("請(qǐng)輸入要合并文件所在文件夾");
String Dir=scanner.next();
try {
copyTextToOne(outFilePathAndFileName,Dir);
} catch (IOException e) {
e.printStackTrace();
}
}
if(menu==2) {
System.out.println("已退出数苫,感謝使用");
break;
}
}
}
}
文件1
文件2
合并文件控制臺(tái).png
結(jié)果文件