Skip to content

Commit 9fc8bb5

Browse files
committed
Add FileUtils#extractResourceFolderContents
1 parent 36d4f71 commit 9fc8bb5

1 file changed

Lines changed: 47 additions & 1 deletion

File tree

src/main/java/de/leonhard/storage/util/FileUtils.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
import java.nio.file.Files;
66
import java.nio.file.Path;
77
import java.nio.file.Paths;
8+
import java.nio.file.StandardCopyOption;
89
import java.security.MessageDigest;
910
import java.security.NoSuchAlgorithmException;
1011
import java.util.ArrayList;
1112
import java.util.Arrays;
13+
import java.util.Enumeration;
1214
import java.util.List;
15+
import java.util.jar.JarEntry;
16+
import java.util.jar.JarFile;
1317
import java.util.zip.ZipEntry;
1418
import java.util.zip.ZipOutputStream;
1519
import lombok.Cleanup;
@@ -323,6 +327,8 @@ public void extractResource(
323327
return;
324328
}
325329

330+
getAndMake(target);
331+
326332
try (
327333
final InputStream inputStream = LightningProviders
328334
.inputStreamProvider()
@@ -331,7 +337,7 @@ public void extractResource(
331337
Valid.notNull(
332338
inputStream,
333339
"The embedded resource '" + resourcePath + "' cannot be found");
334-
Files.copy(inputStream, target.toPath());
340+
Files.copy(inputStream, target.toPath(), StandardCopyOption.REPLACE_EXISTING);
335341

336342
} catch (final IOException ioException) {
337343
throw LightningProviders
@@ -344,6 +350,46 @@ public void extractResource(
344350
}
345351
}
346352

353+
public void extractResourceFolderContents(
354+
@NonNull final File sourceJarFile,
355+
@NonNull final File targetDirectory,
356+
@NonNull final String sourceDirectory,
357+
boolean replace) {
358+
359+
if (!targetDirectory.exists()) {
360+
Valid.checkBoolean(
361+
targetDirectory.mkdirs(),
362+
"Can't create directory '" + targetDirectory.getName() + "'",
363+
"Parent: '" + getParentDirPath(targetDirectory) + "'");
364+
}
365+
366+
Valid.checkBoolean(
367+
targetDirectory.isDirectory(),
368+
"Source directory must be an directory");
369+
370+
try (final JarFile jarFile = new JarFile(sourceJarFile)) {
371+
for (final Enumeration<JarEntry> entries = jarFile.entries(); entries.hasMoreElements(); ) {
372+
final JarEntry jarEntry = entries.nextElement();
373+
final String entryName = jarEntry.getName();
374+
375+
if (entryName.startsWith(sourceDirectory) && !jarEntry.isDirectory()) {
376+
extractResource(targetDirectory.getAbsolutePath(), entryName, replace);
377+
}
378+
}
379+
380+
} catch (final Throwable throwable) {
381+
throw LightningProviders
382+
.exceptionHandler()
383+
.create(
384+
throwable,
385+
"Failed to extract folder from '"
386+
+ targetDirectory
387+
+ "' to '"
388+
+ sourceDirectory
389+
+ "'");
390+
}
391+
}
392+
347393
private void copyFolder(
348394
@NonNull final File source,
349395
@NonNull final File destination)

0 commit comments

Comments
 (0)