我很好奇,好像有一種方法可以定義父文件夾,然後讓程序循環遍歷所有文件和子文件夾,並重命名文件擴展名。重命名父文件夾中的文件?
我知道這可以在命令提示符下使用命令「* .ext * .newext」完成,但這不是我可能的解決方案,我需要重命名嵌套在此文件夾內的2,719個文件擴展名。
我很好奇,好像有一種方法可以定義父文件夾,然後讓程序循環遍歷所有文件和子文件夾,並重命名文件擴展名。重命名父文件夾中的文件?
我知道這可以在命令提示符下使用命令「* .ext * .newext」完成,但這不是我可能的解決方案,我需要重命名嵌套在此文件夾內的2,719個文件擴展名。
是的,你可以做到。這裏有一個例子:
// 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,但很容易修改這種方式。
這是一個簡單的功能,應該爲你做這項工作。對不起,如果它不是最優雅的代碼 - 我的Java有點生疏。
默認情況下,它在其實現中是遞歸的;所以請注意,它會影響指定類型的所有文件在父目錄中!
SwapFileExt PARAMS
path
你想要的父目錄解析cExt
要更換擴展類型nExt
所需的擴展型注意:cExt
和nExt
都將被表示爲不帶'。'(例如名爲 「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);
}
}
}
是的,這是可能的。 – vanje