From 38d845d2e9dd8b189a51f8c32e9d1d82816ba190 Mon Sep 17 00:00:00 2001 From: BONNe Date: Thu, 4 Jan 2024 10:15:13 +0200 Subject: [PATCH] Fixes issue with file exporting in Windows system. (#2256) JAR files does not store files inside it with filesystem separator. Only spot where it makes sense to transform "/" into file separator is in output file saving. --- .../world/bentobox/bentobox/api/addons/Addon.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java index 4c823244c..57190b7d9 100644 --- a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java +++ b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java @@ -12,6 +12,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Logger; +import java.util.regex.Matcher; import org.bukkit.Bukkit; import org.bukkit.Server; @@ -263,7 +264,7 @@ public File saveResource(String jarResource, File destinationFolder, boolean rep throw new IllegalArgumentException("ResourcePath cannot be null or empty"); } - jarResource = jarResource.replace("\\", File.separator).replace("/", File.separator); + jarResource = jarResource.replace('\\', '/'); try (JarFile jar = new JarFile(file)) { JarEntry jarConfig = jar.getJarEntry(jarResource); if (jarConfig != null) { @@ -273,7 +274,9 @@ public File saveResource(String jarResource, File destinationFolder, boolean rep "The embedded resource '" + jarResource + "' cannot be found in " + jar.getName()); } // There are two options, use the path of the resource or not - File outFile = new File(destinationFolder, jarResource); + File outFile = new File(destinationFolder, + jarResource.replaceAll("/", Matcher.quoteReplacement(File.separator))); + if (noPath) { outFile = new File(destinationFolder, outFile.getName()); } @@ -308,7 +311,7 @@ public YamlConfiguration getYamlFromJar(String jarResource) throws IOException, throw new IllegalArgumentException("jarResource cannot be null or empty"); } YamlConfiguration result = new YamlConfiguration(); - jarResource = jarResource.replace("\\", File.separator).replace("/", File.separator); + jarResource = jarResource.replace('\\', '/'); try (JarFile jar = new JarFile(file)) { JarEntry jarConfig = jar.getJarEntry(jarResource); if (jarConfig != null) { @@ -330,7 +333,7 @@ public InputStream getResource(String jarResource) { throw new IllegalArgumentException("ResourcePath cannot be null or empty"); } - jarResource = jarResource.replace("\\", File.separator).replace("/", File.separator); + jarResource = jarResource.replace('\\', '/'); try (JarFile jar = new JarFile(file)) { JarEntry jarConfig = jar.getJarEntry(jarResource); if (jarConfig != null) {