From 92d03391461a7c26a80eb3b400422c0f6f0a8567 Mon Sep 17 00:00:00 2001 From: songdragon Date: Thu, 24 Aug 2023 23:24:38 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20#I7VP0I=20=E4=BF=AE=E5=A4=8DUNKOWN?= =?UTF-8?q?=E5=9C=A8=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jcnc/jnotepad/tool/EncodingDetector.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java index b601e40..9e327f0 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java +++ b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java @@ -3,16 +3,12 @@ package org.jcnc.jnotepad.tool; import com.ibm.icu.text.CharsetDetector; import com.ibm.icu.text.CharsetMatch; -import org.jcnc.jnotepad.constants.TextConstants; import org.slf4j.Logger; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; - -import static org.jcnc.jnotepad.constants.TextConstants.UNKNOWN; /** @@ -28,7 +24,6 @@ public class EncodingDetector { */ public static final int THRESHOLD_CONFIDENCE = 50; - private EncodingDetector() { } @@ -44,11 +39,11 @@ public class EncodingDetector { charsetDetector.setText(inputStream); CharsetMatch[] matchList = charsetDetector.detectAll(); if (matchList == null || matchList.length == 0) { - return UNKNOWN; + return null; } CharsetMatch maxConfidence = matchList[0]; if (maxConfidence.getConfidence() < THRESHOLD_CONFIDENCE) { - return UNKNOWN; + return null; } for (int i = 1; i < matchList.length; i++) { CharsetMatch match = matchList[i]; @@ -62,7 +57,7 @@ public class EncodingDetector { } catch (Exception e) { LOG.error("", e); } - return UNKNOWN; + return null; } /** @@ -73,9 +68,11 @@ public class EncodingDetector { */ public static Charset detectEncodingCharset(File file) { String charset = detectEncoding(file); - if (charset.equals(UNKNOWN)) { + try { + assert charset != null; + return Charset.forName(charset); + } catch (Exception e) { return Charset.defaultCharset(); } - return Charset.forName(charset); } } \ No newline at end of file From 017156b0ebb02d8c1afa789d3c5e337f90cd145d Mon Sep 17 00:00:00 2001 From: songdragon Date: Fri, 25 Aug 2023 00:25:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9B=AE=E5=BD=95=E4=B8=8B.jnotepad=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E9=85=8D=E7=BD=AE=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/config/LoadJnotepadConfig.java | 5 ++++- .../java/org/jcnc/jnotepad/init/Config.java | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java index e63657f..89843ef 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java @@ -3,12 +3,14 @@ package org.jcnc.jnotepad.app.config; import javafx.scene.control.MenuItem; import javafx.scene.input.KeyCombination; import org.jcnc.jnotepad.app.entity.ShortcutKey; +import org.jcnc.jnotepad.init.Config; import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.PopUpUtil; import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar; import org.slf4j.Logger; import java.io.*; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -51,7 +53,8 @@ public abstract class LoadJnotepadConfig { // 动态添加快捷键 menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue)); } - try (BufferedWriter writer = new BufferedWriter(new FileWriter(CONFIG_NAME))) { + String jsonConfigPath= Paths.get(new Config().getAppConfigDir(), CONFIG_NAME).toString(); + try (BufferedWriter writer = new BufferedWriter(new FileWriter(jsonConfigPath))) { writer.write(JNOTEPAD_CONFIG); } catch (IOException e) { PopUpUtil.errorAlert("错误", "读写错误", "配置文件读写错误!"); diff --git a/src/main/java/org/jcnc/jnotepad/init/Config.java b/src/main/java/org/jcnc/jnotepad/init/Config.java index 5b646d6..b9e45d9 100644 --- a/src/main/java/org/jcnc/jnotepad/init/Config.java +++ b/src/main/java/org/jcnc/jnotepad/init/Config.java @@ -5,6 +5,7 @@ import org.slf4j.Logger; import java.io.*; import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; import java.util.Properties; import static org.jcnc.jnotepad.constants.AppConstants.CH_LANGUAGE_PACK_NAME; @@ -20,8 +21,17 @@ public class Config { private String languagePackName; + private String appConfigDir; Logger logger = LogUtil.getLogger(this.getClass()); + public Config() { + appConfigDir = System.getProperty("user.home") + File.separator + ".jnotepad"; + boolean isConfigDirReady = Paths.get(appConfigDir).toFile().mkdirs(); + if (!isConfigDirReady) { + appConfigDir = "/tmp"; + } + } + /** * 从文件中读取属性配置。 * @@ -51,7 +61,8 @@ public class Config { Properties enLanguagePack = getEnglishLanguagePack(); - try (OutputStream outputStream = new FileOutputStream(CH_LANGUAGE_PACK_NAME)) { + String chineseFilePath = Paths.get(appConfigDir, CH_LANGUAGE_PACK_NAME).toString(); + try (OutputStream outputStream = new FileOutputStream(chineseFilePath)) { OutputStreamWriter writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8); // 使用 UTF-8 编码 chLanguagePack.store(writer, JNOTEPAD_CH_LANGUAGE_PACK_NAME); @@ -59,7 +70,8 @@ public class Config { logger.info("未检测到中文语言包!"); } - try (OutputStream outputStream = new FileOutputStream(EN_LANGUAGE_PACK_NAME)) { + String enFilePath = Paths.get(appConfigDir, EN_LANGUAGE_PACK_NAME).toString(); + try (OutputStream outputStream = new FileOutputStream(enFilePath)) { OutputStreamWriter writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8); // 使用 UTF-8 编码 enLanguagePack.store(writer, JNOTEPAD_EN_LANGUAGE_PACK_NAME); @@ -114,4 +126,7 @@ public class Config { return properties; } + public String getAppConfigDir() { + return appConfigDir; + } } From 8c533b7a6fe2dc7d618710028dcad4d589cba801 Mon Sep 17 00:00:00 2001 From: songdragon Date: Fri, 25 Aug 2023 00:36:17 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E5=9B=BA=E5=AE=9A=E4=BD=BF?= =?UTF-8?q?=E7=94=A8user.home/.jnotepad=E4=BD=9C=E4=B8=BA=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/config/LoadJnotepadConfig.java | 16 ++++++++++---- .../java/org/jcnc/jnotepad/init/Config.java | 21 +++++++++++++------ src/main/resources/logback.xml | 4 ++-- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java b/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java index 89843ef..96d3662 100644 --- a/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java +++ b/src/main/java/org/jcnc/jnotepad/app/config/LoadJnotepadConfig.java @@ -10,6 +10,7 @@ import org.jcnc.jnotepad.ui.menu.JNotepadMenuBar; import org.slf4j.Logger; import java.io.*; +import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; @@ -28,15 +29,18 @@ public abstract class LoadJnotepadConfig { Logger logger = LogUtil.getLogger(this.getClass()); public final void load() { + String path = getConfigPath(); + if (!Files.exists(Paths.get(path))) { + // 不存在则创建 + createConfig(); + } // 判断是否存在这个配置文件 - try (InputStream inputStream = new FileInputStream(CONFIG_NAME)) { + try (InputStream inputStream = new FileInputStream(getConfigPath())) { logger.info("正在加载配置文件..."); // 存在则加载 loadConfig(inputStream); } catch (IOException e) { logger.info("未检测到配置文件!"); - // 不存在则创建 - createConfig(); } } @@ -53,7 +57,7 @@ public abstract class LoadJnotepadConfig { // 动态添加快捷键 menuItem.setAccelerator(KeyCombination.keyCombination(shortKeyValue)); } - String jsonConfigPath= Paths.get(new Config().getAppConfigDir(), CONFIG_NAME).toString(); + String jsonConfigPath = getConfigPath(); try (BufferedWriter writer = new BufferedWriter(new FileWriter(jsonConfigPath))) { writer.write(JNOTEPAD_CONFIG); } catch (IOException e) { @@ -61,6 +65,10 @@ public abstract class LoadJnotepadConfig { } } + private static String getConfigPath() { + return Paths.get(new Config().getAppConfigDir(), CONFIG_NAME).toString(); + } + /** * 获取快捷键集合 * diff --git a/src/main/java/org/jcnc/jnotepad/init/Config.java b/src/main/java/org/jcnc/jnotepad/init/Config.java index b9e45d9..85966b1 100644 --- a/src/main/java/org/jcnc/jnotepad/init/Config.java +++ b/src/main/java/org/jcnc/jnotepad/init/Config.java @@ -5,6 +5,8 @@ import org.slf4j.Logger; import java.io.*; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.Properties; @@ -26,8 +28,9 @@ public class Config { public Config() { appConfigDir = System.getProperty("user.home") + File.separator + ".jnotepad"; - boolean isConfigDirReady = Paths.get(appConfigDir).toFile().mkdirs(); - if (!isConfigDirReady) { + Path path = Paths.get(appConfigDir); + boolean isConfigDirReady = path.toFile().mkdirs(); + if (!isConfigDirReady && !Files.exists(path)) { appConfigDir = "/tmp"; } } @@ -42,13 +45,19 @@ public class Config { //设置语言包 languagePackName = EN_LANGUAGE_PACK_NAME; - try (InputStream inputStream = new FileInputStream(languagePackName)) { - InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); // 使用 UTF-8 编码 - properties.load(reader); - } catch (IOException e) { + String languageFilePath = Paths.get(appConfigDir, languagePackName).toString(); + + if (!Files.exists(Paths.get(languageFilePath))) { // 如果读取出错,则调用初始化方法 initializePropertiesFile(); } + + try (InputStream inputStream = new FileInputStream(languageFilePath)) { + InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); // 使用 UTF-8 编码 + properties.load(reader); + } catch (IOException ignored) { + + } return properties; } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 12cc4c3..5b0517f 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -3,13 +3,13 @@ - JJ + - +