我有一个Java EE应用程序,它打包为war文件。 在WEB-INF / classes /下我有一个config文件夹,应该在Java EE应用程序启动时复制到文件系统中。
String[] filesToCopy = {"foo", ...};
for (String fileName : filesToCopy) {
URL resource = classLoader.getResource(CONFIG_FOLDER_IN_WAR + fileName);
File targetFile = new File(configFolderPath, fileName);
org.apache.commons.io.FileUtils.copyURLToFile(resource, targetFile);
}
到目前为止工作。但是现在配置文件夹还包含子文件夹和大量文件,因此我不想手动列出它们。
有没有办法复制整个文件夹,包括。所有子文件夹?
答案 0 :(得分:1)
因为我无法找到更好的解决方案,所以我自己做了,并把它放在我自己的FileUtils中:
public static void copyFromWarToFolder(String folderInWar, File targetFolder) {
try {
URL resource = FileUtils.class.getClassLoader().getResource(folderInWar);
VirtualFile virtualFileOrFolder = VFS.getChild(resource.toURI());
copyFromWarToFolder(virtualFileOrFolder, targetFolder);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void copyFromWarToFolder(VirtualFile virtualFileOrFolder, File targetFolder) throws Exception {
if (virtualFileOrFolder.isDirectory()) {
File innerTargetFolder = new File(targetFolder, virtualFileOrFolder.getName());
innerTargetFolder.mkdir();
for (VirtualFile innerFileOrFolder : virtualFileOrFolder.getChildren()) {
copyFromWarToFolder(innerFileOrFolder, innerTargetFolder);
}
} else {
org.apache.commons.io.FileUtils.copyURLToFile(virtualFileOrFolder.asFileURL(), new File(targetFolder, virtualFileOrFolder.getName()));
}
}