Java EE应用程序 - 将文件夹从war复制到文件系统

时间:2014-04-16 07:16:07

标签: java-ee-6 war file-copying

我有一个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);
}

到目前为止工作。但是现在配置文件夹还包含子文件夹和大量文件,因此我不想手动列出它们。

有没有办法复制整个文件夹,包括。所有子文件夹?

1 个答案:

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