diff --git a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java index fb1c761..f33022f 100644 --- a/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java +++ b/src/main/java/org/jcnc/jnotepad/controller/event/handler/menuBar/SaveFile.java @@ -75,13 +75,11 @@ public class SaveFile implements EventHandler { File file = fileChooser.showSaveDialog(UiUtil.getAppWindow()); if (file != null) { LogUtil.getLogger(currentClass).info("正在保存文件:{}", file.getName()); - selectedTab.save(); + selectedTab.save(file); // 将保存后的文件设置为已关联 selectedTab.setRelevance(true); // 更新Tab页标签上的文件名 selectedTab.setText(file.getName()); - // 将文件对象保存到Tab页的UserData中 - selectedTab.setUserData(file); } } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java index 428214d..81ee991 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java +++ b/src/main/java/org/jcnc/jnotepad/ui/module/LineNumberTextArea.java @@ -7,6 +7,7 @@ import org.jcnc.jnotepad.tool.LogUtil; import org.jcnc.jnotepad.tool.SingletonUtil; import org.jcnc.jnotepad.tool.UiUtil; import org.jcnc.jnotepad.ui.root.center.tab.JNotepadTab; +import org.slf4j.Logger; import java.io.BufferedWriter; import java.io.File; @@ -17,6 +18,8 @@ import java.io.IOException; * @author 许轲 */ public class LineNumberTextArea extends BorderPane { + + private static final Logger logger=LogUtil.getLogger(LineNumberTextArea.class); static final int[] SIZE_TABLE = {9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE}; private static final int MIN_LINE_NUMBER_WIDTH = 30; @@ -72,17 +75,21 @@ public class LineNumberTextArea extends BorderPane { */ public void save() { JNotepadTab tab = UiUtil.getJnotepadtab(); - if (tab != null) { - File file = (File) tab.getUserData(); - String newValue = this.mainTextArea.getText(); - if (file != null) { - try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, tab.getCharset()))) { - writer.write(newValue); - LogUtil.getLogger(this.getClass()).info("正在自动保存---"); - } catch (IOException ignored) { - LogUtil.getLogger(this.getClass()).info("已忽视IO异常!"); - } - } + if (tab == null) { + return; + } + File file = (File) tab.getUserData(); + String newValue = this.mainTextArea.getText(); + if (file == null) { + // 文件对象不存在 + logger.warn("Tab上没有关联文件信息"); + return; + } + try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, tab.getCharset()))) { + writer.write(newValue); + LogUtil.getLogger(this.getClass()).info("正在自动保存---"); + } catch (IOException ignored) { + LogUtil.getLogger(this.getClass()).info("已忽视IO异常!"); } } diff --git a/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java index d5edb7a..700be3a 100644 --- a/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java +++ b/src/main/java/org/jcnc/jnotepad/ui/root/center/tab/JNotepadTab.java @@ -4,6 +4,7 @@ import javafx.scene.control.Tab; import org.jcnc.jnotepad.controller.config.AppConfigController; import org.jcnc.jnotepad.ui.module.LineNumberTextArea; +import java.io.File; import java.nio.charset.Charset; /** @@ -70,7 +71,22 @@ public class JNotepadTab extends Tab { this.charset = charset; } + /** + * 保存文件内容 + */ public void save() { this.lineNumberTextArea.save(); } + + /** + * 保存为指定文件 + * @param file 新文件 + */ + public void save(File file) { + if (file == null) { + return; + } + this.setUserData(file); + save(); + } }