Приложение Java EE - копирование папки из войны в файловую систему с помощью

У меня есть приложение Java EE, упакованное как военный файл. В разделе WEB-INF/classes/ у меня есть папка конфигурации, которую следует скопировать при запуске приложения 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);
}

это работало до сих пор. Но теперь папка config содержит также подпапки и множество файлов, так что я не хочу перечислять их вручную.

Есть ли способ скопировать всю папку, в т.ч. все подпапки?


person Marcel    schedule 16.04.2014    source источник


Ответы (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()));
    }
}
person Marcel    schedule 16.04.2014