使用Files.walk删除文件

摘要:使用Files.walk删除指定文件名的文件。

  使用Files.walk工具,递归判断指定目录中的常规文件路径名是否符合约定名称,如果满足条件就删除。

public class DelFile {
    // 文件名在此集合就删除
    private static Set<String> givenFileNames = new HashSet<>();

    public static void main(String[] args) {
        givenFileNames.add("更多课程联系微信:xxx.txt" );
        givenFileNames.add("更多课程联系QQ:Wiener.txt" );
        givenFileNames.add("微信:Wiener.png" );
        givenFileNames.add("QQ:xxx.jpg" );
        // 获取要批量重命名的文件目录
        String path = "/Users/楼兰胡杨";
//        传false时只打印满足条件的文件,传true时删除
        delByWalk(path, Boolean.FALSE);
//        deleteFileByGivenName(path);
    }

    public static void delByWalk(String givenDirName, Boolean isDeleted) {
        try (Stream<Path> givenPaths = Files.walk(Paths.get(givenDirName))) {
            // 筛选出常规文件
            List<String> result = givenPaths.filter(Files::isRegularFile)
                    //把path映射为路径名
                    .map(path -> path.toString())
                    // 筛选出符合条件的文件
                    .filter(fileName -> ifDeleted(new File(fileName), isDeleted))
                    .collect(Collectors.toList());

        } catch (Exception e) {
            System.out.println("--------");
        }
    }

    /**
     * 如果isDeleted=false时,可以正确打印文件名称。令isDeleted=true时,删除文件
     * Java 8之前的方法
     * @param file      文件
     * @param isDeleted true 可以删除
     * 
     */
    public static void deleteGivenFiles(File file, Boolean isDeleted) {
        if (file.isDirectory()) {
            // 如果是目录,就删除目录下所有的文件和文件夹
            File[] files = file.listFiles();
            // 遍历目录下的文件和文件夹
            for (File f : files) {
                // 如果是文件就删除
                if (f.isFile()) {
                    ifDeleted(f, isDeleted);
                } else if (file.isDirectory()) {
                    // 如果是文件夹就递归
                    deleteGivenFiles(f, isDeleted);
                }
            }
        } else if (file.isFile()) {
            ifDeleted(file, isDeleted);
        }

    }

    private static boolean ifDeleted(File oneFile, Boolean isDeleted) {
        String fileName = oneFile.getName();
        if (givenFileNames.contains(fileName)) {
            System.out.println("被删除的文件:" + oneFile.getPath());
            if (isDeleted) {
                oneFile.delete();
            }
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }
}

函数ifDeleted(File oneFile, Boolean isDeleted)用于判断文件名是否符合预期,并根据isDeleted确认是否删除文件。通过对比可知,Java8的walk函数更简单,deleteGivenFiles很臃肿。

posted @ 2024-04-27 10:32  楼兰胡杨  阅读(78)  评论(0编辑  收藏  举报