拷贝文件到指定目录

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 查找制定目录所有的视频文件、
 * 把符合条件的文件拷贝到制定目录
 * @author hasee
 *
 */
public class Demo84_FileSearchVideo {
	public static void main(String[] args) {
		// 视频所在文件夹
		File file = new File("D:\\xx");
		List<File> list = FileUtil.seaVideo(file);
		Object[] array = list.toArray();
		for (Object object : array) {
			System.out.println(object);
		}
		// 拷贝到的路径
		FileUtil.copyFile(list, "D:\\视频\\xx");
	}
}
class FileUtil {
	static List<File> fileList = new ArrayList<>(); // 保存符合条件的文件
	/**
	 * 筛选符合条件的文件
	 * @param file	传入的文件路径
	 * @return 返回符合条件的文件集合
	 */
	public static List<File> seaVideo(File file){
		if (file == null || ! file.exists()) {	// 传入路径为null或者不存在
			return null;
		}
		if (file.isFile() && file.getName().endsWith("avi")|| file.getName().endsWith("mp4")|| file.getName().endsWith("mkv")) {	// 如果是个文件并且以mp4或avi结尾
			fileList.add(file);	// 就把文件添加到集合
		}else if(file.isDirectory()) {	// 如果是个目录
			File[] files = file.listFiles();	// 列出目录所有文件
			if (files != null) {
				for (File f : files) {	// 遍历目录
					seaVideo(f);	// 再次调用方法
				}
			}
		}
		return fileList;	// 返回集合,此时所有符合条件的文件都已添加到集合内
	}
	/**
	 * 文件拷贝
	 * @param list 文件集合
	 * @param newPath	要拷贝到指定的路径
	 */
	public static void copyFile(List<File> list, String newPath) {
		if (list == null || newPath == null) return;
		new File(newPath).mkdirs();	// 新文件路径可能不存在,所以创建一下以防万一2
		File[] childPath = list.toArray(new File[list.size()]);	// 取出所有子文件路径的数组
		for (File file : childPath) {
			File newFile = new File(newPath + "/" + file.getName());	// 在新文件保存对于子文件名
			try {
				InputStream in = new FileInputStream(file);
				OutputStream out = new FileOutputStream(newFile);
				byte[] b = new byte[1024 * 5];
				int len;	// 保存每次从旧文件里读出数据的个数(长度)
				while ((len = in.read(b)) != -1) {
					out.write(b, 0, len);
				}
				in.close();
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

转载于:https://my.oschina.net/u/4107179/blog/3048005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值