Jsoup学习笔记7之File类操作文件:复制只包含指定类型文件的文件夹,并在新创建的同名文件夹中创建同名的另一种格式的文件

       接着上一篇的笔记做一些改进,之前看过的File类操作文件夹的文章都只是复制指定目录下的文件夹和文件,没有任何筛选,现在要做的是在前人的基础上,实现只复制包含指定格式文件的文件夹,并在新创建的同名文件夹中创建同名的另一种格式的文件,具体的功能如下(说的有点绕,看代码和实现结果图就明白了):

1、获取指定目录下面,指定扩展名的文件,

2、在另一个目录中复制包含指定文件的所有文件夹,并在创建的同名文件夹中创建同名的csv文件。

示例如下:

package com.daxiang.filenamefilter;

/**
 * File类操作文件综合应用 
 * 需求:获取指定目录下面,指定扩展名的文件,
 * 在指定目录中复制包含指定文件的所有文件夹,并在创建的同名文件夹中创建同名的csv文件。
 * 
 * 思路:
 * 1.需要深度遍历。--递归
 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中
 * 3.将容器中的内容遍历,在指定目录中复制包含指定文件的所有文件夹,并在创建的同名文件夹中创建同名的csv文件
 * 
 */
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FileNameFilterTest {

	// 源文件夹
	static String url1 = "D:\\daxiang\\saztest";
	// 目标文件夹
	static String url2 = "D:\\daxiang\\saztest\\output";

	public static void main(String[] args) throws IOException {

		// 创建目标文件夹
		File file2 = new File(url2);
		if (!file2.exists()) {
			file2.mkdirs();
		}
		// 获取源文件夹当前下的文件或目录
		File dir = new File(url1);

		FilenameFilter filter = new FilterBySaz(".saz");// 过滤.saz文件
		List<File> fileList = new ArrayList<File>();
		getFileList(dir, filter, fileList);

		createCsvFile(fileList);
	}

	/**
	 * @param dir 需要遍历的目录
	 * @param filter 过滤满足条件的文件
	 * @param fileList 存放符合条件的容器
	 */
	public static void getFileList(File dir, FilenameFilter filter,
			List<File> fileList) {
		if (dir.exists()) {
			File[] files = dir.listFiles();// 找到目录下面的所有文件
			for (File file : files) {
				// 递归
				if (file.isDirectory() && !(file.getName().equals("output"))) {
					getFileList(file, filter, fileList);
				} else {
					// 对遍历的文件进行过滤,符合条件的放入List集合中
					if (filter.accept(dir, file.getName())) {
						fileList.add(file);
						
						// 输出各种路径名称,调试代码用
						String path1 = file.getAbsolutePath();
						System.out.println(path1);
						String path2 = file.getPath();
						System.out.println(path2);
						String path3 = file.getParent();
						System.out.println(path3);
						String path4 = file.getParentFile().getParent();
						System.out.println(path4);
						String path5 = path3.substring(path4.length()+1);
						System.out.println(path5);
						String path6 = file.getName();
						System.out.println(path6);
						
					}
				}
			}

		}
	}

	/**
	 * 将容器中的文件遍历,写入到目的文件中
	 * 
	 * @param list 存放满足条件的文件的集合
	 * @throws IOException
	 */
	public static void createCsvFile(List<File> fileList) throws IOException {

		// 遍历List集合
		for (File file : fileList) {

//			File csvfile1 = new File((file.getParent() + File.separator + file
//					.getName().replace("saz", "csv")));
//			csvfile1.createNewFile();
			
			// 在目标文件夹中创建存放有saz文件的同名文件夹
			String path1 = file.getParent();
			String path2 = file.getParentFile().getParent();
			String path3 = path1.substring(path2.length()+1);
			File file2 = new File(url2 + File.separator + path3);
			if (!file2.exists()) {
				file2.mkdirs();
			}
			// 在新建的同名文件夹中创建同名的与相应的saz文件同名的csv文件
			File csvfile2 = new File((url2 + File.separator + path3 + File.separator + file
					.getName().replace("saz", "csv")));
			csvfile2.createNewFile();
		}

	}
}
package com.daxiang.filenamefilter;
/**
 * 说明:
 * 自定义FilterBySaz类,过滤指定扩展名的文件
 * 
 */
import java.io.File;
import java.io.FilenameFilter;

public class FilterBySaz implements FilenameFilter{

	private String ext;

	public FilterBySaz(String ext) {
		this.ext = ext;
	}
	
	public boolean accept(File dir, String name) {
		// TODO Auto-generated method stub
		return name.endsWith(ext);
	}
}

程序执行之前所操作的文件夹中是没有output这个文件夹的,文件夹结构如下图所示, 其中只有144P-1080P这6个文件夹中包含saz格式的文件,其他文件夹都没有



程序执行之后生成了output文件夹,output文件夹里生成了所要求的文件夹和文件,结构如下图所示,:






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值