2014-04-17 56 views
0

我很好奇,好像有一種方法可以定義父文件夾,然後讓程序循環遍歷所有文件和子文件夾,並重命名文件擴展名。重命名父文件夾中的文件?

我知道這可以在命令提示符下使用命令「* .ext * .newext」完成,但這不是我可能的解決方案,我需要重命名嵌套在此文件夾內的2,719個文件擴展名。

+0

是的,這是可能的。 – vanje

回答

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(); 
    } 

這一個不經過subdirs,但很容易修改這種方式。

0

這是一個簡單的功能,應該爲你做這項工作。對不起,如果它不是最優雅的代碼 - 我的Java有點生疏。

默認情況下,它在其實現中是遞歸的;所以請注意,它會影響指定類型的所有文件在父目錄中!

SwapFileExt PARAMS

  • path你想要的父目錄解析
  • cExt要更換擴展類型
  • nExt所需的擴展型

注意:cExtnExt都將被表示爲不帶''(例如名爲 「txt」,符 「.txt」)

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); 
     } 
    } 
}