Java-File-递归:用户输入文件夹路径,返回该文件夹下的文件类型以及对应的数量

使用递归,根据输入文件夹路径,返回该文件夹下的文件类型以及对应的数量

  • 创建一个方法,目的是拿到文件夹路径下所有的文件(无论是文件还是目录)进行判断,返回所有的文件类型和数量。
package com.xiahk;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Test3 {

	public static void main(String[] args) {

		Map<String, Integer> map = new HashMap<String, Integer>();
		Scanner sc = new Scanner(System.in);
		System.out.println("输入文件夹路径");
		File file = new File(sc.nextLine());
		getFile(file, map);
		Set<String> keySet = map.keySet();
		for (String string : keySet) {
			System.out.println(string + "类型的文件有 " + map.get(string) + "个");
		}

	}
  • 首先获得文件夹路径,将路径下的所有文件转换成File[]数组,在遍历该数组。遍历是判断File对象是否为文件,是的话就拿到文件的后缀名。
  • 在Map集合内查看是否存在该类型文件后缀,如果没有便放到集合中,对应的值设置为1。存在的话就拿到对应的值加一再放进去。
  • 如果是文件夹的话,我们可以使用递归,调用本身的方法。
  • 返回Map集合,遍历便可拿到所有的文件类型以及对应的数量。
	public static void getFile(File file, Map<String, Integer> map) {
		File[] files = file.listFiles();
		for (File f2 : files) {
			// 如果是文件
			if (f2.isFile()) {
				String name = f2.getName();
				// 获取文件的后缀名
				String[] split = name.split("\\.");
				int length = split.length;
				String key = split[length - 1];
				// 判断是否存在
				boolean iskey = map.containsKey(key);
				if (iskey) {
					map.put(key, map.get(key) + 1);
				} else {
					map.put(key, 1);
				}
			}
			// 如果是文件夹
			if (f2.isDirectory()) {
				getFile(f2, map);
			}
		}
	}
}

例如查看 E:\HBuilder 下的所有文件类型和数量

查看文件类型数量

以上是博主目前初学Java写的,可能会有一些问题或者说有更好的方法来实现功能,希望大家可以留言互相交流。

已知问题:

当路径为存储盘根目录时,会有空指针异常

异常情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java中的File类来实现将包含路径文件名数组复制到另一个文件夹下,同时创建出对应路径的功能。具体实现过程如下: 1. 定义源文件夹路径和目标文件夹路径: ```java String srcFolder = "source/folder/path"; String destFolder = "destination/folder/path"; ``` 2. 使用File类的listFiles()方法获取源文件夹下的所有文件和子文件夹: ```java File[] files = new File(srcFolder).listFiles(); ``` 3. 遍历文件数组,如果是文件夹递归调用自身进行处理,否则将文件复制到目标文件夹下: ```java for (File file : files) { if (file.isDirectory()) { copyFolder(file.getAbsolutePath(), destFolder + "/" + file.getName()); } else { File destFile = new File(destFolder + "/" + file.getName()); Files.copy(file.toPath(), destFile.toPath()); } } ``` 4. 在递归调用自身的时候,需要将目标文件夹路径作为参数传入,并在递归调用之前创建出对应路径文件夹: ```java private static void copyFolder(String srcFolder, String destFolder) throws IOException { File destFile = new File(destFolder); if (!destFile.exists()) { destFile.mkdirs(); } File[] files = new File(srcFolder).listFiles(); for (File file : files) { if (file.isDirectory()) { copyFolder(file.getAbsolutePath(), destFolder + "/" + file.getName()); } else { File dest = new File(destFolder + "/" + file.getName()); Files.copy(file.toPath(), dest.toPath()); } } } ``` 这样,就可以实现将包含路径文件名数组复制到另一个文件夹下,并创建出对应路径的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值