private void saveFile() { if (currentFile.equals("打开文件")) { saveFileAs(); } else { try { FileWriter writer = new FileWriter(currentFile); writer.write(textArea.getText()); writer.close(); setTitle(currentFile + " - Text Editor"); saved = true; } catch (IOException e) { JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } }

时间: 2024-02-10 15:17:54 浏览: 36
这是一个Java代码片段,它实现了一个文本编辑器中的保存文件功能。如果当前打开的文件名为“打开文件”,则会跳转到“另存为”功能。否则,它将使用FileWriter类将文本区域中的文本写入当前文件,并将窗口标题设置为文件名。如果保存成功,saved变量将设置为true。如果在写入文件时发生IOException,则会弹出一个错误对话框显示异常信息。
相关问题

用Java创建一个简单的文本编辑器,参考Windows记事本程序,可打开文件对话框选择打开一个文件,并在文本区进行编辑,然后把它保存起来。

好的,以下是一个简单的Java代码示例,实现了文本编辑器的打开、编辑和保存功能: ```java import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class TextEditor extends JFrame implements ActionListener { private JTextArea textArea; private JFileChooser fileChooser; private String currentFile; public TextEditor() { super("Text Editor"); // 创建菜单栏 JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); // 创建“文件”菜单 JMenuItem openItem = new JMenuItem("打开"); openItem.addActionListener(this); JMenuItem saveItem = new JMenuItem("保存"); saveItem.addActionListener(this); menuBar.add(openItem); menuBar.add(saveItem); // 创建文本区 textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); add(scrollPane, BorderLayout.CENTER); // 创建文件选择器 fileChooser = new JFileChooser(); setSize(600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals("打开")) { openFile(); } else if (command.equals("保存")) { saveFile(); } } private void openFile() { int returnVal = fileChooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line; textArea.setText(""); while ((line = reader.readLine()) != null) { textArea.append(line + "\n"); } reader.close(); currentFile = file.getAbsolutePath(); } catch (IOException e) { JOptionPane.showMessageDialog(this, "无法打开文件 " + file.getName() + ": " + e.getMessage()); } } } private void saveFile() { if (currentFile != null) { try { FileWriter writer = new FileWriter(currentFile); writer.write(textArea.getText()); writer.close(); } catch (IOException e) { JOptionPane.showMessageDialog(this, "无法保存文件 " + currentFile + ": " + e.getMessage()); } } else { int returnVal = fileChooser.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { FileWriter writer = new FileWriter(file); writer.write(textArea.getText()); writer.close(); currentFile = file.getAbsolutePath(); } catch (IOException e) { JOptionPane.showMessageDialog(this, "无法保存文件 " + file.getName() + ": " + e.getMessage()); } } } } public static void main(String[] args) { new TextEditor(); } } ``` 这个示例代码使用了Swing库来实现界面,通过JFileChooser类实现了文件对话框,并且实现了打开、编辑和保存文件的功能。希望这个示例代码能对你有所帮助!

制作一个记事本软件,实现纯文本文件的新建、打开、保存、另存、复制、粘贴、查找、替换、关于等等功能;关闭软件是弹出对话框提示是否把修改保存,根据用户选择更新磁盘文件内容。java直接给出代码

以下是一个简单的记事本软件的Java代码,实现了基本的功能: ```java import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.UIManager; import javax.swing.filechooser.FileNameExtensionFilter; public class Notepad implements ActionListener, KeyListener { private JFrame frame; private JTextArea textArea; private JFileChooser fileChooser; private File currentFile; private boolean isModified; public Notepad() { frame = new JFrame("Notepad"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); textArea = new JTextArea(); textArea.addKeyListener(this); JScrollPane scrollPane = new JScrollPane(textArea); frame.getContentPane().add(scrollPane); JMenuBar menuBar = new JMenuBar(); frame.setJMenuBar(menuBar); JMenu fileMenu = new JMenu("File"); fileMenu.setMnemonic(KeyEvent.VK_F); menuBar.add(fileMenu); JMenuItem newMenuItem = new JMenuItem("New"); newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); newMenuItem.addActionListener(this); fileMenu.add(newMenuItem); JMenuItem openMenuItem = new JMenuItem("Open..."); openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); openMenuItem.addActionListener(this); fileMenu.add(openMenuItem); JMenuItem saveMenuItem = new JMenuItem("Save"); saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); saveMenuItem.addActionListener(this); fileMenu.add(saveMenuItem); JMenuItem saveAsMenuItem = new JMenuItem("Save As..."); saveAsMenuItem.addActionListener(this); fileMenu.add(saveAsMenuItem); JMenuItem exitMenuItem = new JMenuItem("Exit"); exitMenuItem.addActionListener(this); fileMenu.add(exitMenuItem); JMenu editMenu = new JMenu("Edit"); editMenu.setMnemonic(KeyEvent.VK_E); menuBar.add(editMenu); JMenuItem copyMenuItem = new JMenuItem("Copy"); copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); copyMenuItem.addActionListener(this); editMenu.add(copyMenuItem); JMenuItem pasteMenuItem = new JMenuItem("Paste"); pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK)); pasteMenuItem.addActionListener(this); editMenu.add(pasteMenuItem); JMenuItem findMenuItem = new JMenuItem("Find"); findMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK)); findMenuItem.addActionListener(this); editMenu.add(findMenuItem); JMenuItem replaceMenuItem = new JMenuItem("Replace"); replaceMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.CTRL_MASK)); replaceMenuItem.addActionListener(this); editMenu.add(replaceMenuItem); JMenu helpMenu = new JMenu("Help"); helpMenu.setMnemonic(KeyEvent.VK_H); menuBar.add(helpMenu); JMenuItem aboutMenuItem = new JMenuItem("About"); aboutMenuItem.addActionListener(this); helpMenu.add(aboutMenuItem); fileChooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files", "txt"); fileChooser.setFileFilter(filter); frame.setSize(600, 400); frame.setLocationRelativeTo(null); frame.setVisible(true); isModified = false; } public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { public void run() { new Notepad(); } }); } public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals("New")) { newFile(); } else if (command.equals("Open...")) { openFile(); } else if (command.equals("Save")) { saveFile(); } else if (command.equals("Save As...")) { saveFileAs(); } else if (command.equals("Exit")) { exit(); } else if (command.equals("Copy")) { textArea.copy(); } else if (command.equals("Paste")) { textArea.paste(); } else if (command.equals("Find")) { find(); } else if (command.equals("Replace")) { replace(); } else if (command.equals("About")) { JOptionPane.showMessageDialog(frame, "Notepad v1.0", "About Notepad", JOptionPane.INFORMATION_MESSAGE); } } public void keyPressed(KeyEvent e) { isModified = true; } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } private void newFile() { if (isModified) { int result = JOptionPane.showConfirmDialog(frame, "Do you want to save changes?", "Save Changes", JOptionPane.YES_NO_CANCEL_OPTION); if (result == JOptionPane.YES_OPTION) { saveFile(); } else if (result == JOptionPane.CANCEL_OPTION) { return; } } textArea.setText(""); currentFile = null; isModified = false; } private void openFile() { if (isModified) { int result = JOptionPane.showConfirmDialog(frame, "Do you want to save changes?", "Save Changes", JOptionPane.YES_NO_CANCEL_OPTION); if (result == JOptionPane.YES_OPTION) { saveFile(); } else if (result == JOptionPane.CANCEL_OPTION) { return; } } int result = fileChooser.showOpenDialog(frame); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line).append("\n"); } reader.close(); textArea.setText(sb.toString()); currentFile = file; isModified = false; } catch (IOException e) { JOptionPane.showMessageDialog(frame, "Error opening file: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } } private void saveFile() { if (currentFile == null) { saveFileAs(); } else { try { FileWriter writer = new FileWriter(currentFile); writer.write(textArea.getText()); writer.close(); isModified = false; } catch (IOException e) { JOptionPane.showMessageDialog(frame, "Error saving file: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } } private void saveFileAs() { int result = fileChooser.showSaveDialog(frame); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); if (file.exists()) { int confirmResult = JOptionPane.showConfirmDialog(frame, "File already exists. Overwrite?", "Confirm Overwrite", JOptionPane.YES_NO_OPTION); if (confirmResult != JOptionPane.YES_OPTION) { return; } } try { FileWriter writer = new FileWriter(file); writer.write(textArea.getText()); writer.close(); currentFile = file; isModified = false; } catch (IOException e) { JOptionPane.showMessageDialog(frame, "Error saving file: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } } } private void exit() { if (isModified) { int result = JOptionPane.showConfirmDialog(frame, "Do you want to save changes?", "Save Changes", JOptionPane.YES_NO_CANCEL_OPTION); if (result == JOptionPane.YES_OPTION) { saveFile(); } else if (result == JOptionPane.CANCEL_OPTION) { return; } } System.exit(0); } private void find() { String text = JOptionPane.showInputDialog(frame, "Find:"); if (text != null) { String allText = textArea.getText(); int index = allText.indexOf(text); if (index == -1) { JOptionPane.showMessageDialog(frame, "Not found.", "Find", JOptionPane.INFORMATION_MESSAGE); } else { textArea.setCaretPosition(index); textArea.setSelectionStart(index); textArea.setSelectionEnd(index + text.length()); } } } private void replace() { String findText = JOptionPane.showInputDialog(frame, "Find:"); if (findText == null) { return; } String replaceText = JOptionPane.showInputDialog(frame, "Replace with:"); if (replaceText == null) { return; } String allText = textArea.getText(); int index = allText.indexOf(findText); if (index == -1) { JOptionPane.showMessageDialog(frame, "Not found.", "Replace", JOptionPane.INFORMATION_MESSAGE); } else { textArea.setCaretPosition(index); textArea.setSelectionStart(index); textArea.setSelectionEnd(index + findText.length()); textArea.replaceSelection(replaceText); } } } ``` 该记事本软件使用了Java Swing界面库来创建GUI,并使用了Java IO库来进行文件操作。

相关推荐

最新推荐

recommend-type

Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar

Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rarJava开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar
recommend-type

基于android的公司员工考勤综合信息平台源码.zip

提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
recommend-type

珍藏很久的一套源码升级了很多

很强大的阿凤飞飞的身份就把饭啦啊开房记录看妇科阿里看到就考虑是否就解放路口空间按时到路口附近开了房间卡拉的时间分开垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho时到路口附近开了房间卡拉的时间分开垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho时到路口附近开了房间卡拉的时间分开垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho时到路口附近开
recommend-type

附件二六个指标与权重得分 - 副本.xlsx

附件二六个指标与权重得分 - 副本
recommend-type

自学助词自学助词自学助词

自学助词自学助词自学助词
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。