From d6ae95ad079d8b9d337933777b516ee73ff38e7b Mon Sep 17 00:00:00 2001 From: RainbowDashLabs Date: Sat, 11 Jul 2020 14:22:56 +0200 Subject: [PATCH] replaced file copy with in out streams. copy cant handle utf8 --- .../eldoutilities/localization/Localizer.java | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/eldoria/eldoutilities/localization/Localizer.java b/src/main/java/de/eldoria/eldoutilities/localization/Localizer.java index 29904d4..291dbab 100644 --- a/src/main/java/de/eldoria/eldoutilities/localization/Localizer.java +++ b/src/main/java/de/eldoria/eldoutilities/localization/Localizer.java @@ -7,7 +7,6 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; @@ -143,17 +142,36 @@ private void createOrUpdateLocaleFiles() { // Create the property files if they do not exists. for (String includedLocale : includedLocales) { String filename = localesPrefix + "_" + includedLocale + ".properties"; - try (InputStream inputStream = plugin.getResource(filename)) { - File localeFile = Paths.get(messages.toString(), filename).toFile(); - if (localeFile.exists() || inputStream == null) { - continue; + + File localeFile = Paths.get(messages.toString(), filename).toFile(); + if (localeFile.exists()) { + continue; + } + + StringBuilder builder = new StringBuilder(); + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( + new FileInputStream(ClassLoader.getSystemClassLoader().getResource(filename).getFile()), + StandardCharsets.UTF_8))) { + String line = bufferedReader.readLine(); + while (line != null) { + builder.append(line).append("\n"); + line = bufferedReader.readLine(); } - Files.copy(inputStream, localeFile.toPath()); - plugin.getLogger().info("Created default locale " + filename); } catch (IOException e) { - plugin.getLogger().log(Level.WARNING, "Failed to create default message file " + filename, e); - return; + plugin.getLogger().log(Level.WARNING, "Could not load resource " + filename + ".", e); + } catch (NullPointerException e) { + plugin.getLogger().log(Level.WARNING, "Locale " + includedLocale + " could not be loaded but should exists.", e); + continue; + } + + try (OutputStreamWriter outputStream = new OutputStreamWriter(new FileOutputStream(localeFile), StandardCharsets.UTF_8)) { + outputStream.write(builder.toString()); + + } catch (IOException e) { + plugin.getLogger().log(Level.WARNING, "Failed to create default message file " + localeFile.getName() + ".", e); + continue; } + plugin.getLogger().info("Created default locale " + filename); } List localeFiles = new ArrayList<>(); @@ -251,7 +269,7 @@ private void createOrUpdateLocaleFiles() { outputStream.write("# File automatically updated at " + DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now()) + "\n"); for (Map.Entry entry : treemap.entrySet()) { - plugin.getLogger().info("Writing:" + entry.getKey() + "=" + entry.getValue().replace("\n", "\\n")); + plugin.getLogger().info("Writing: " + entry.getKey() + "=" + entry.getValue().replace("\n", "\\n")); outputStream.write(entry.getKey() + "=" + entry.getValue().replace("\n", "\\n") + "\n"); }