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

114 阅读2分钟

需求分析

实现一个记事本,工具栏使用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类