Java-具有新建、打开和保存功能的简单记事本

需求分析

实现一个记事本,工具栏使用Menu菜单实现;可新建、保存和打开文件。
界面如下图所示:
在这里插入图片描述

代码实现

TextEditor

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
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.JTextArea;

//新建 打开 保存
public class TextEditor{
	private JFrame frame;//整体框架
	private JTextArea textArea=null;

	public TextEditor() {
		frame=new JFrame("记事本-Version01");
		frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
		frame.setBounds(260,100,500,500);//设置大小
		JMenuBar menuBar=new JMenuBar();//菜单条
		
		textArea=new JTextArea();//多行文本输入
		frame.add(textArea,BorderLayout.CENTER);//Border布局
		textArea.setLineWrap(true);//自动到达指定宽度换行
		JMenu file_Menu=new JMenu("文件");//菜单
		file_Menu.setMnemonic(1);//助记符
		JMenu edit_Menu=new JMenu("编辑");
		JMenuItem save_JMenuItem=new JMenuItem("新建");
		save_JMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				newFile();//添加点击事件
			}
		});
		JMenuItem open_JMenuItem=new JMenuItem("打开");
		open_JMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				openFile();
			}
		});
		JMenuItem new_JMenuItem=new JMenuItem("保存");
		new_JMenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				saveFile();
			}
			
		});
		JMenuItem copy_JMenuItem=new JMenuItem("复制");
		JMenuItem paste_JMenuItem=new JMenuItem("粘贴");
		JMenuItem slice_JMenuItem=new JMenuItem("剪切");
		
		file_Menu.add(new_JMenuItem);
		file_Menu.add(save_JMenuItem);
		file_Menu.add(open_JMenuItem);
		menuBar.add(file_Menu);
		
		edit_Menu.add(copy_JMenuItem);
		edit_Menu.add(paste_JMenuItem);
		edit_Menu.add(slice_JMenuItem);
		menuBar.add(edit_Menu);
		frame.setJMenuBar(menuBar);
		frame.setVisible(true);
	}
	private void newFile() {
		System.out.println("new file");
//		选择保存或取消
		if(textArea.getText().equals("")) {//判断文本域有无内容
			frame.setTitle("无标题-记事本");
		}else {
		}
	}
	private void saveFile() {
		System.out.println("save file");
		JFileChooser fileChooser=new JFileChooser();
		//文件导航窗口
		fileChooser.setDialogTitle("另存为……");
//		按默认的方式显示
		fileChooser.showSaveDialog(null);
		fileChooser.setVisible(true);
//		得到用户希望保存文件的路径
		String filePathString=fileChooser.getSelectedFile().getAbsolutePath();
//		准备写入到指定文件
		FileWriter fileWriter=null;
		BufferedWriter bufferedWriter=null;
		try {
			fileWriter=new FileWriter(filePathString);
			bufferedWriter=new BufferedWriter(fileWriter);
			bufferedWriter.write(textArea.getText());
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}finally {
			try {
				bufferedWriter.close();
				fileWriter.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}
	private void openFile() {
		System.out.println("open file");
		JFileChooser chooser=new JFileChooser();//文件导航窗口
		chooser.setDialogTitle("请选择文件……");
		chooser.showOpenDialog(null);//使用默认方式
		chooser.setVisible(true);
//		判断是否选择了文件
		if(chooser.getSelectedFile()==null) {
			return;
		}
//		得到用户选择文件的路径
		String filenameString=chooser.getSelectedFile().getAbsolutePath();
		FileReader fileReader=null;
		BufferedReader bufferedReader=null;
		try {
			fileReader=new FileReader(filenameString);
			bufferedReader=new BufferedReader(fileReader);
//		从文件中读取信息并显示到textArea
			String string="";
			String allConString="";
			try {
				while((string=bufferedReader.readLine())!=null) {
					allConString+=string+"\r\n";
				}
//				放在TextArea上
				textArea.setText(allConString);
			} catch (IOException e1) {
				e1.printStackTrace();
			}finally {
				try {
					bufferedReader.close();
					fileReader.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new TextEditor();
	}
}

实验总结

  1. JFileChooser不是抽象类也不是接口,因此可以实例化一个对象
  2. File getSelectedFile()File[] getSelectedFiles()该方法用于获取打开或保存的文件。
  3. Java文件的读写操作,利用字符流或是字节流进行写入读出
  4. 细节之处,记得try/catch一下,使代码更简洁可以可以适当提取出函数

参考文档

Java学习笔记之JFileChooser的简单使用

Java FileReader类

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单记事本 Java 代码,实现新建打开保存、另存为和退出功能: ```java import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; 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.UIManager; import javax.swing.filechooser.FileNameExtensionFilter; public class Notepad extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextArea textArea; private JFileChooser fileChooser; private String fileName; public Notepad() { super("记事本"); // 设置菜单栏 JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("文件"); JMenuItem newMenuItem = new JMenuItem("新建"); JMenuItem openMenuItem = new JMenuItem("打开"); JMenuItem saveMenuItem = new JMenuItem("保存"); JMenuItem saveAsMenuItem = new JMenuItem("另存为"); JMenuItem exitMenuItem = new JMenuItem("退出"); newMenuItem.addActionListener(this); openMenuItem.addActionListener(this); saveMenuItem.addActionListener(this); saveAsMenuItem.addActionListener(this); exitMenuItem.addActionListener(this); fileMenu.add(newMenuItem); fileMenu.add(openMenuItem); fileMenu.add(saveMenuItem); fileMenu.add(saveAsMenuItem); fileMenu.addSeparator(); fileMenu.add(exitMenuItem); menuBar.add(fileMenu); setJMenuBar(menuBar); // 设置文本区域 textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); getContentPane().add(scrollPane, BorderLayout.CENTER); // 设置文件选择器 fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter("文本文件(*.txt)", "txt")); // 设置窗口 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setLocationRelativeTo(null); setVisible(true); } public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } new Notepad(); } @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); switch (command) { case "新建": newFile(); break; case "打开": openFile(); break; case "保存": saveFile(); break; case "另存为": saveAsFile(); break; case "退出": exit(); break; } } // 新建文件 private void newFile() { if (textArea.getText().length() > 0) { int option = JOptionPane.showConfirmDialog(this, "是否保存更改?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION); if (option == JOptionPane.YES_OPTION) { saveFile(); } else if (option == JOptionPane.CANCEL_OPTION) { return; } } textArea.setText(""); fileName = null; } // 打开文件 private void openFile() { if (textArea.getText().length() > 0) { int option = JOptionPane.showConfirmDialog(this, "是否保存更改?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION); if (option == JOptionPane.YES_OPTION) { saveFile(); } else if (option == JOptionPane.CANCEL_OPTION) { return; } } int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { try { File file = fileChooser.getSelectedFile(); fileName = file.getAbsolutePath(); BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); sb.append(System.lineSeparator()); } reader.close(); textArea.setText(sb.toString()); } catch (Exception e) { e.printStackTrace(); } } } // 保存文件 private void saveFile() { if (fileName == null) { saveAsFile(); } else { try { BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); writer.write(textArea.getText()); writer.close(); } catch (Exception e) { e.printStackTrace(); } } } // 另存为文件 private void saveAsFile() { int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { try { File file = fileChooser.getSelectedFile(); if (!file.getName().endsWith(".txt")) { file = new File(file.getAbsolutePath() + ".txt"); } fileName = file.getAbsolutePath(); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(textArea.getText()); writer.close(); } catch (Exception e) { e.printStackTrace(); } } } // 退出程序 private void exit() { if (textArea.getText().length() > 0) { int option = JOptionPane.showConfirmDialog(this, "是否保存更改?", "记事本", JOptionPane.YES_NO_CANCEL_OPTION); if (option == JOptionPane.YES_OPTION) { saveFile(); } else if (option == JOptionPane.CANCEL_OPTION) { return; } } System.exit(0); } } ``` 该记事本实现新建打开保存、另存为和退出功能,可以选择文本文件进行编辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值