diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResContainer.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResContainer.java index 2796ee8ef..8dfbf2fc1 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResContainer.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResContainer.java @@ -5,7 +5,6 @@ import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; @@ -66,14 +65,14 @@ public class ResContainer implements Comparable { } return resContainer; } - + public static ResContainer singleBinaryFile(String name, InputStream content) { ResContainer resContainer = new ResContainer(name, Collections.emptyList()); try { + // TODO: don't store binary files in memory resContainer.binary = new ByteArrayInputStream(IOUtils.toByteArray(content)); - } - catch(IOException e) { - LOG.warn("Contents of the binary resource '{}' not saved, got exception {}", name, e); + } catch (Exception e) { + LOG.warn("Contents of the binary resource '{}' not saved, got exception", name, e); } return resContainer; } @@ -94,7 +93,7 @@ public class ResContainer implements Comparable { public CodeWriter getContent() { return content; } - + @Nullable public InputStream getBinary() { return binary; diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResourcesSaver.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResourcesSaver.java index 2eca60187..4e9145a91 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResourcesSaver.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResourcesSaver.java @@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory; import jadx.api.ResourceFile; import jadx.core.codegen.CodeWriter; +import jadx.core.utils.files.FileUtils; import jadx.core.utils.files.ZipSecurity; import static jadx.core.utils.files.FileUtils.prepareFile; @@ -89,16 +90,16 @@ public class ResourcesSaver implements Runnable { return; } InputStream binary = rc.getBinary(); - if(binary != null) { + if (binary != null) { try { - outFile.getParentFile().mkdirs(); - FileOutputStream binaryFileStream = new FileOutputStream(outFile); - IOUtils.copy(binary, binaryFileStream); - binaryFileStream.close(); - binary.close(); - } - catch(IOException e) { - LOG.warn("Resource '{}' not saved, got exception {}", rc.getName(), e); + FileUtils.makeDirsForFile(outFile); + try (FileOutputStream binaryFileStream = new FileOutputStream(outFile)) { + IOUtils.copy(binary, binaryFileStream); + } finally { + binary.close(); + } + } catch (Exception e) { + LOG.warn("Resource '{}' not saved, got exception", rc.getName(), e); } return; }