Java以流的方式將指定文件夾里的.txt文件全部復制到另一文件夾,並刪除原文件夾中所有.txt文件


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * 將指定文件夾里的.txt文件全部復制到另一文件夾,並刪除原文件夾中所有.txt文件
 * @author jinghui.wu
 *
 */
public class TxtFilesCopyTest {
	
	/**
	 * 獲取指定路徑下所有.txt文件
	 * @param oldPath	指定的原文件夾路徑
	 * @param newPath	指定的新文件夾路徑
	 * @return	結果
	 */
	public String getAllFilesByPath(String oldPath, String newPath) {
		List<File> files = new ArrayList<File>();
		// 獲取指定路徑的文件夾
		File file = new File(oldPath);
		// 獲取文件夾下所有文件
		File[] tempList = file.listFiles();
		if (tempList == null || tempList.length == 0) {
        	return "未找到文件!";
		}
		for (File f : tempList) {
    		if (f.isFile()){	// 判斷是否為文件
    			// 獲取文件名
				String fileName = f.getName();
				// 通過切割獲取文件后綴名
				String str = fileName.substring(fileName.indexOf("."), fileName.length()).toLowerCase();
				if (str.equals(".txt")) {
					files.add(f);
				}
    		}
		}
		
		copyAllFiles(files, newPath);
		return "復制成功!";
	}
	
	/**
	 * 復制所有.txt文件到另一文件夾
	 * @param files	要復制的.txt文件集合
	 * @param newPath 新文件夾路徑
	 */
	private void copyAllFiles(List<File> files, String newPath) {
		// 根據給定路徑獲取文件夾
		File folder = new File(newPath);
		// 判斷是否存在
        if (!folder.exists()) {
        	// 指定文件夾不存在,新建
        	folder.mkdirs();
        }
        for (File file : files) {
        	try {
				/* 讀入TXT文件 */ 
				InputStreamReader reader = new InputStreamReader(new FileInputStream(file), "UTF-8");
				BufferedReader br = new BufferedReader(reader);
				String line = "";
				List<String> lineList = new ArrayList<>();
				while ((line = br.readLine()) != null) {	// 判斷本行是否為null
					lineList.add(line);	// 將每行內容放入集合中
				}
				br.close();
				
				/* 寫入Txt文件 */
				File writeFile = new File(newPath + "/" + file.getName());
				writeFile.createNewFile();
				//BufferedWriter bw = new BufferedWriter(new FileWriter(writeFile));
				// FileWriter沒有setEncoding方法來設置編碼級,會出現中文亂碼問題,所以換成下面方法
				BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (writeFile,true),"UTF-8"));
				for (int j = 0; j < lineList.size(); j++) {
					bw.write(lineList.get(j));
					bw.write("\r\n");	//換行
				}
				bw.flush();
				bw.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
        	
        	// 刪除原文件夾中已復制過的.txt文件
			file.delete();
		}
	}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM