重命名父文件夹中的文件?

时间:2014-04-17 13:57:41

标签: java io

我很好奇,好像有一种定义父文件夹的方法,然后让程序循环遍历所有文件和子文件夹,并重命名文件扩展名。

我知道这可以在命令提示符下使用命令" * .ext * .newext"但是对我来说这不是一个可能的解决方案,我需要重命名嵌套在这个文件夹中的2,719个文件扩展名。

2 个答案:

答案 0 :(得分:0)

是的,你可以做到。这是一个例子:

    // java 6
    File parentDir = new File("..");
    System.out.println(parentDir.getAbsolutePath());
    final File[] files = parentDir.listFiles();
    System.out.println(Arrays.toString(files));

    // java 7+
    File parentDir = new File("..");
    try {
        Files.walkFileTree(parentDir.toPath(), new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                if (file.toFile().renameTo(new File("othername.txt"))) {
                    return FileVisitResult.CONTINUE;
                } else {
                    return FileVisitResult.TERMINATE;
                }
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }

这个不通过子目录,但很容易修改。

答案 1 :(得分:0)

这是一个应该为你完成工作的简单功能。对不起,如果它不是最优雅的代码 - 我的Java有点生疏。

默认情况下,它的实现是递归的;所以请注意它会影响父目录中指定类型的所有文件

SwapFileExt 参数

  • path 您要解析的父目录
  • cExt 您要替换的扩展程序类型
  • nExt 所需的扩展类型

注意:cExtnExt都不代表&#39; &#39; (例如&#34; txt&#34;,&#34; .txt&#34;)

public static void SwapFileExt(String path, String cExt, String nExt) {
    File parentDir = new File(path);
    File[] contents = parentDir.listFiles();

    for (int i = 0; i < contents.length; i++) {
        if (contents[i].isFile()) {
            if (contents[i].toString().contains("." + cExt)) {
                String item = contents[i].toString().replaceAll("." + cExt, "." + nExt);
                contents[i].renameTo(new File(item));
            }
        } else if (contents[i].isDirectory()) {
            SwapFileExt(contents[i].toString(), cExt, nExt);
        }
    }
}