Skip to content

Commit ebb1200

Browse files
#107 Extract entries by prefix exclude prefix path
1 parent edfb5bc commit ebb1200

File tree

5 files changed

+19
-23
lines changed

5 files changed

+19
-23
lines changed

src/main/java/ru/olegcherednik/zip4jvm/engine/unzip/UnzipExtractEngine.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.commons.collections4.CollectionUtils;
3838
import org.apache.commons.io.FilenameUtils;
3939
import org.apache.commons.io.IOUtils;
40+
import org.apache.commons.lang3.StringUtils;
4041

4142
import java.io.IOException;
4243
import java.io.OutputStream;
@@ -86,10 +87,10 @@ protected Map<String, String> getEntriesByPrefix(Set<String> fileNames) {
8687
if (zipModel.hasEntry(entryName)) {
8788
ZipEntry zipEntry = zipModel.getZipEntryByFileName(entryName);
8889
map.put(entryName, FilenameUtils.getName(zipEntry.getFileName()));
89-
} else {
90-
for (ZipEntry zipEntry : getEntriesByPrefix(entryName + '/'))
91-
map.put(zipEntry.getFileName(), zipEntry.getFileName());
9290
}
91+
92+
for (ZipEntry zipEntry : getEntriesByPrefix(entryName + '/'))
93+
map.put(zipEntry.getFileName(), StringUtils.substring(zipEntry.getFileName(), fileName.length() + 1));
9394
}
9495

9596
return map.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(map);

src/test/java/ru/olegcherednik/zip4jvm/UnzipItSolidTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,7 @@ public void shouldUnzipOneFileIgnorePath() throws IOException {
8686
public void shouldUnzipFolder() throws IOException {
8787
Path dstDir = Zip4jvmSuite.subDirNameAsMethodNameWithTime(rootDir);
8888
UnzipIt.zip(zipDeflateSolid).dstDir(dstDir).extract(dirNameBikes);
89-
90-
assertThatDirectory(dstDir).exists().hasEntries(1).hasDirectories(1);
91-
assertThatDirectory(dstDir.resolve(dirNameBikes)).matches(dirBikesAssert);
89+
assertThatDirectory(dstDir).matches(dirBikesAssert);
9290
}
9391

9492
public void shouldExtractZipArchiveWhenEntryNameWithCustomCharset() throws IOException {

src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionDeflateTest.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ public void shouldUnzipWhenWhenDeflateCompressionAndPkwareEncryption() throws IO
132132
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
133133

134134
UnzipIt.zip(zipDeflateSolidPkware).dstDir(dstDir).password(password).extract(dirNameCars);
135-
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
136-
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
135+
assertThatDirectory(dstDir).matches(dirCarsAssert);
137136
}
138137

139138
public void shouldUnzipWhenWhenDeflateCompressionAndAesEncryption() throws IOException {
@@ -144,8 +143,7 @@ public void shouldUnzipWhenWhenDeflateCompressionAndAesEncryption() throws IOExc
144143
.build();
145144

146145
UnzipIt.zip(zipDeflateSolidAes).dstDir(dstDir).settings(settings).extract(dirNameCars);
147-
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
148-
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
146+
assertThatDirectory(dstDir).matches(dirCarsAssert);
149147
}
150148

151149
public void shouldUseCompressStoreWhenFileEmpty() throws IOException {

src/test/java/ru/olegcherednik/zip4jvm/compression/CompressionStoreTest.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,7 @@ public void shouldUnzipWhenWhenStoreCompressionAndPkwareEncryption() throws IOEx
123123
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
124124

125125
UnzipIt.zip(zipStoreSolidPkware).dstDir(dstDir).password(password).extract(dirNameCars);
126-
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
127-
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
126+
assertThatDirectory(dstDir).matches(dirCarsAssert);
128127
}
129128

130129
public void shouldUnzipWhenWhenStoreCompressionAndAesEncryption() throws IOException {
@@ -133,8 +132,7 @@ public void shouldUnzipWhenWhenStoreCompressionAndAesEncryption() throws IOExcep
133132
UnzipSettings settings = UnzipSettings.builder().passwordProvider(fileNamePasswordProvider).build();
134133

135134
UnzipIt.zip(zipStoreSolidAes).dstDir(dstDir).settings(settings).extract(dirNameCars);
136-
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
137-
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
135+
assertThatDirectory(dstDir).matches(dirCarsAssert);
138136
}
139137

140138
}

src/test/java/ru/olegcherednik/zip4jvm/engine/UnzipEngineTest.java

+10-9
Original file line numberDiff line numberDiff line change
@@ -70,29 +70,23 @@ public void shouldUnzipZipFileIntoDestinationFolderWhenDeflateSolid() throws IOE
7070
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
7171

7272
UnzipIt.zip(zipDeflateSolid).dstDir(dstDir).extract(dirNameCars);
73-
74-
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
75-
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
73+
assertThatDirectory(dstDir).matches(dirCarsAssert);
7674
}
7775

7876
public void shouldUnzipZipFileIntoDestinationFolderWhenDeflateSolidPkware() throws IOException {
7977
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
8078
UnzipSettings settings = UnzipSettings.builder().password(password).build();
8179

8280
UnzipIt.zip(zipDeflateSolid).settings(settings).dstDir(dstDir).extract(dirNameCars);
83-
84-
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
85-
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
81+
assertThatDirectory(dstDir).matches(dirCarsAssert);
8682
}
8783

8884
public void shouldUnzipZipFileIntoDestinationFolderWhenDeflateSolidAes() throws IOException {
8985
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
9086
UnzipSettings settings = UnzipSettings.builder().passwordProvider(fileNamePasswordProvider).build();
9187

9288
UnzipIt.zip(zipDeflateSolid).settings(settings).dstDir(dstDir).extract(dirNameCars);
93-
94-
assertThatDirectory(dstDir).exists().hasDirectories(1).hasRegularFiles(0);
95-
assertThatDirectory(dstDir.resolve(dirNameCars)).matches(dirCarsAssert);
89+
assertThatDirectory(dstDir).matches(dirCarsAssert);
9690
}
9791

9892
public void shouldCorrectlySetLastTimeStampWhenUnzip() throws IOException, ParseException {
@@ -113,6 +107,13 @@ public void shouldCorrectlySetLastTimeStampWhenUnzip() throws IOException, Parse
113107
assertThat(convert(Files.getLastModifiedTime(fileFooUnzip).toMillis())).isEqualTo(str);
114108
}
115109

110+
public void shouldUnzipZipFileIntoDestinationFolderWhenStoreSolid() throws IOException {
111+
Path dstDir = Zip4jvmSuite.subDirNameAsMethodName(rootDir);
112+
113+
UnzipIt.zip(zipDeflateSolid).dstDir(dstDir).extract(dirNameCars);
114+
assertThatDirectory(dstDir).matches(dirCarsAssert);
115+
}
116+
116117
private static long convert(String str) throws ParseException {
117118
return new SimpleDateFormat("yyyy.MM.dd'T'HH:mm:ss", Locale.ENGLISH).parse(str).getTime();
118119
}

0 commit comments

Comments
 (0)