File类(二)遍历盘符(文件夹)和模糊查找文件类型的方法

一、遍历文件夹下的所有文件

方法目标:
1)遍历D:\超市2.0文件夹下所有文件和子文件夹A(B、C、D…N);
2)子文件夹A(B、C、D…N)之间换行展示在控制台中。
代码如下:

public class demo {
	public static void main(String[] args) {
		File file = new File("D:\\超市2.0");
		fileDir(file);
	}

	private static void fileDir(File dir) {
		String path = dir.getAbsolutePath();
		int level = path.replace("\\", "/").split("/").length-1;
		for(int i=0;i<level;i++) {
			System.out.print("\t");
		}
		System.out.print(dir.getName()+"\n");
		if (dir.isDirectory()) {
			// 获得目录下所有文件的数组
			File[] files = dir.listFiles();
			if (files != null && files.length > 0) {
				for (File file : files) {
					fileDir(file);
				}
			}
		}
	}

}

效果如下:
File类(二)遍历盘符(文件夹)和模糊查找文件类型的方法_第1张图片
说明:本方法遇到文件夹就打印且换行,直到遍历出子文件夹为止!

二、模糊查询文件

方法目标:
1)找出"D:\超市2.0"文件夹下的class文件;
2)把这些文件首字母变成大写,并且展示在控制台。
#如果只需要完成第一步模糊查询class文件,请把代码里面的首字母大小写转变删除即可完成功能。
代码如下:

/**
 * @遍历所有文件
 * @用递归方法
 * 找到带后缀.class的文件
 * 
 */
public class demo {
	public static void main(String[] args) throws Exception {
		File file = new File("D:\\超市2.0");
		fileDir(file);
	}

	private static void fileDir(File dir) throws IOException {
		// 获得目录下所有文件的数组
		File[] files = dir.listFiles();
		for (File file : files) {
			if (file.isDirectory()) {
				// 如果是目录,调用fileDir(file)方法
				fileDir(file);
			}
			if (file.isFile() && file.getName().endsWith(".class")) {
				String str = file.getAbsolutePath();
				String str1 = str.substring(0, str.lastIndexOf("\\") + 1)
						+ (file.getName().charAt(0) + "").toUpperCase() + file.getName().substring(1);
				File fileOther = new File(str1);
				if (fileOther.exists()) {
					// 路径相同可以修改成功
					//renameTo(File file),可以修改名字
					file.renameTo(fileOther);
					System.out.println(file.getAbsolutePath());
				}
			}
		}
	}
}

结果如下:

D:\超市2.0\src\com\新建 RTF 文档 - 副本.class

三、复制文件

方法目标:把D:\超市2.0复制到C盘中。
代码如下:

/**
 * 将D:\超市2.0拷贝到C盘中
 * @author woniuxy
 *
 */
public class copy {
	public static void main(String[] args) {
		// 创建被复制的文件夹对象
		File directory1 = new File("D:\\超市2.0");
		// 递归
		openDirectory(directory1);
	}

	public static void openDirectory(File file) {
		// 获取被复制的文件夹中的一级子文件对象
		File[] files = file.listFiles();
		for (int i = 0; i < files.length; i++) {
			if (files[i].isFile()) {
				// 说明正在遍历的是一个文件
				// 应该将正在遍历的文件复制到新的位置
				// 定义输入流和输出流
				FileInputStream fis = null;
				FileOutputStream fos = null;
				try {
					// 创建输入流对象和输出流对象
					fis = new FileInputStream(files[i]);
					// 使用文件绝对路径获取新文件的绝对路径
					String newFilePath = "C" + files[i].getAbsolutePath().substring(1);
					fos = new FileOutputStream(newFilePath);
					byte[] b = new byte[1024];
					int length = -1;
					// 循环的读写
					while ((length = fis.read(b)) > -1) {
						fos.write(b, 0, length);
					}
				} catch (Exception e) {
					e.printStackTrace();
				} finally {
					try {
						fis.close();
						fos.close();
					} catch (Exception e1) {
						e1.printStackTrace();
					}
				}
			} else {
				// 说明正在遍历的是一个文件夹
				// 使用遍历的文件夹的绝对路径得到复制后的文件夹的绝对路径
				String newDirectoryPath = "C" + files[i].getAbsolutePath().substring(1);
				File newDirecotory = new File(newDirectoryPath);
				newDirecotory.mkdir();
				//文件夹继续向下递归
				openDirectory(files[i]);
			}
		}
	}
}

你可能感兴趣的:(File类(二)遍历盘符(文件夹)和模糊查找文件类型的方法)