用java写一个记事本

要求

  要求在程序中,用户输入指令1代表“新建文件”,此时可以从控制台获取用户输入的文件内容;

  指令2代表“打开文件”,此时可将指定路径的txt文件的内容展现到控制台;

  指令3代表“修改文件”,此时既可以修改新建文件的内容,也可以修改打开文件的内容;

  指令4代表“保存”,此时如果是新建的文件需要保存,则将文件保存到用户输入的路径,如果是打开的文件需要保存,则将原来内容覆盖;

  指令5代表“退出”,即退出本系统。


效果



思路

(1)根据任务介绍和运行结果分析可知,此任务需要创建一个记事本类,在类中可以使用while循环实现控制台中操作指令的多次输入,使用switch语句根据控制台输入的操作指令来判断执行什么操作。

(2)输入指令1时进行新建文件操作,此时需要从控制台获取输入的内容并暂存到全局变量中,以便后期进行保存和修改内容时使用。可以使用StringBuffer来保存控制台中每次输入的内容,输入内容时可能会涉及换行,这里可以使用while循环来循环输入,每循环一次都将控制台获取的内容拼接换行符后,追加到文本内容中。当内容中输入“stop”字符串时,输入文本内容的操作结束,并将新建文本的内容暂存在全局变量中。

(3)执行指令2时,可以打开指定路径的文件,由于是模拟记事本程序,因此限定此功能只支持打开txt文件。此操作首先要获取输入的路径,判断此路径的文件是否是txt文件,如果是则通过字符流读取此文件,然后将此文件的内容打印至控制台,并且暂存在全局变量中,将文件的路径也保存至全局变量中。

(4)执行指令3时,可以对暂存在全局变量中的文本内容进行修改,修改后的内容也需要暂存到全局变量中。此操作首先要判断一下修改之前是否先经过过新建文件或者打开文件操作,当确认经过上述操作后,可以将输入的字符串与文本内容中目标字符串进行替换(String的replace方法),来完成修改内容功能。修改过程可通过while循环来进行多次的修改,当捕捉到“stop”字符串时修改结束,并将修改后的内容暂存到全局变量中。

(5)执行指令4时,将所有全局变量中的内容保存至本地,如果是新建的文件则保存至用户输入的路径,如果是打开后的文件则将原文件覆盖。可以通过文件路径的全局变量判断是哪种保存方式,当是打开文件的方式时,直接通过字符流写入;当是新建的方式时,先获取用户输入的路径,再用字符流写入。

(6)执行指令5,直接退出系统,可以通过代码“System.exit(0);”实现。


源码

package notebook;

import java.io.FileFilter;
import java.io.IOException;

public class NoteBook {


    public static void main(String[] args) throws IOException {

        NoteUilte noteUilte = new NoteUilte();

        while (noteUilte.num != 5) {

            noteUilte.scan();

        }
    }
}

package notebook;

import java.io.*;
import java.util.Scanner;

public class NoteUilte {

    NoteUilte() {

    }

    static int num;
    File file;
    String writeStr;

    public void scan() throws IOException {

        Scanner scanner = new Scanner(System.in);

        System.out.println("输入1 新建文件,输入2打开文件,输入3修改文件,输入4保存文件,输入5退出");

        int num = scanner.nextInt();
        scanner.nextLine();//消费换行符

        switch (num) {

            case 1: {

                System.out.println("请问您要将文件保存在哪个路径");
                String filePath = scanner.nextLine();//这一行没有让我输入,但是在调式的时候却有执行并让我输入,我输入了E:\桌面\,但我看了filePath变量却显示""空的

                File file = new File(filePath);

                if (!file.exists()) {

                    System.out.println("您输入的文件不存在,将为您新建");
                    file.createNewFile();
                    System.out.println("文件已新建");

                } else {

                    System.out.println("您输入的文件已存在,输入2打开");
                }


                break;
            }

            case 2: {

                System.out.println("请问您要打开哪个路径的文件?");
                String filePath = scanner.nextLine();
                FileReader fileReader1 = new FileReader(filePath);
                BufferedReader fileReader = new BufferedReader(fileReader1);

//                    if(fileReader.readLine() == null){
//
//                        System.out.println("该文件是空的!");
//
//                    }else{
//
//                    }

                String b;

                while ((b = fileReader.readLine()) != null) {

                    System.out.println("该文件的内容是:" + b);

                }

                System.out.println("文件已读取完毕");
                fileReader.close();

                break;

            }

            case 3: {

                System.out.println("请问您要修改哪个路径的文件?");
                String filePath = scanner.nextLine();
                File file = new File(filePath);

                if (!file.exists()) {

                    file.createNewFile();

                } else {

                    System.out.println("该文件存在,请输入您要”修改的字符:修改后的字符“冒号是英文的");
                    String edit = scanner.nextLine();

//                    for (String s : edit.split(":")) {//第一串s是用户要修改的字符串,第二个s是用户要替换的字符串
//
//                        FileWriter fileWriter = new FileWriter(file);
//                        fileWriter.write();//指令3代表“修改文件”,此时既可以修改新建文件的内容,也可以修改打开文件的内容

                    String[] edits = edit.split(":");
                    String older = edits[0];
                    String newer = edits[1];

                    String writeStr = older.replace(older, newer);
                    System.out.println("已修改,保存请输入4");
                    GetFileEdit(file, writeStr);//获取被修改的文件路径

                }
                break;
            }

            case 4: {

                FileWriter fileWriterEdit = new FileWriter(file);
//                fileWriterEdit.flush();
                fileWriterEdit.write(writeStr);
                fileWriterEdit.flush();//写入后刷新
                System.out.println("您的文件已保存");
                break;
            }

            case 5: {

                stop(5);
                System.out.println("程序已结束,感谢您的使用!");
                System.exit(0);
                break;

            }
            default: {

                System.out.println("您的输入有误哦!");
            }
        }
    }

    public void GetFileEdit(File file, String writeStr) {

        this.file = file;
        this.writeStr = writeStr;

    }

    public void stop(int num) {

        this.num = num;

    }
}

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.BorderFactory; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; public class JNotePadUI extends JFrame { private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenu editMenu; private JMenuItem menuCut; private JMenuItem menuCopy; private JMenuItem menuPaste; private JMenuItem menuAbout; private JTextArea textArea; private JLabel stateBar; private JFileChooser fileChooser; private JPopupMenu popUpMenu; public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640, 480); // 菜单栏 JMenuBar menuBar = new JMenuBar(); // 设置「文件」菜单 JMenu fileMenu = new JMenu("文件"); menuOpen = new JMenuItem("打开"); // 快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); menuSaveAs = new JMenuItem("另存为"); menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuSave); fileMenu.add(menuSaveAs); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuClose); // 设置「编辑」菜单 JMenu editMenu = new JMenu("编辑"); menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); menuPaste = new JMenuItem("粘贴"); menuPaste.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); // 设置「关于」菜单 JMenu aboutMenu = new JMenu("关于"); menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); setJMenuBar(menuBar); // 文字编辑区域 textArea = new JTextArea(); textArea.setFont(new Font("宋体", Font.PLAIN, 16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel, BorderLayout.CENTER); // 状态栏 stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder( BorderFactory.createEtchedBorder()); contentPane.add(stateBar, BorderLayout.SOUTH); popUpMenu = editMenu.getPopupMenu(); fileChooser = new JFileChooser(); } private void setUpEventListener() { // 按下窗口关闭钮事件处理 addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeFile(); } } ); // 菜单 - 打开 menuOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } } ); // 菜单 - 保存 menuSave.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); } } ); // 菜单 - 另存为 menuSaveAs.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFileAs(); } } ); // 菜单 - 关闭文件 menuClose.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { closeFile(); } } ); // 菜单 - 剪切 menuCut.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cut(); } } ); // 菜单 - 复制 menuCopy.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } } ); // 菜单 - 粘贴 menuPaste.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { paste(); } } ); // 菜单 - 关于 menuAbout.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // 显示对话框 JOptionPane.showOptionDialog(null, "程序名称:\n JNotePad \n" + "程序设计:\n \n" + "简介:\n 一个简单的文字编辑器\n" + " 可作为验收Java的实现对象\n" + " 欢迎网友下载研究交流\n\n" + " /", "关于JNotePad", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null); } } ); // 编辑区键盘事件 textArea.addKeyListener( new KeyAdapter() { public void keyTyped(KeyEvent e) { processTextArea(); } } ); // 编辑区鼠标事件 textArea.addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) popUpMenu.show(editMenu, e.getX(), e.getY()); } public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); } } ); } private void openFile() { if(isCurrentFileSaved()) { // 文件是否为保存状态 open(); // 打开 } else { // 显示对话框 int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { // 确认文件保存 case JOptionPane.YES_OPTION: saveFile(); // 保存文件 break; // 放弃文件保存 case JOptionPane.NO_OPTION: open(); break; } } } private boolean isCurrentFileSaved() { if(stateBar.getText().equals("未修改")) { return false; } else { return true; } } private void open() { // fileChooser 是 JFileChooser 的实例 // 显示文件选取的对话框 int option = fileChooser.showDialog(null, null); // 使用者按下确认键 if(option == JFileChooser.APPROVE_OPTION) { try { // 开启选取的文件 BufferedReader buf = new BufferedReader( new FileReader( fileChooser.getSelectedFile())); // 设定文件标题 setTitle(fileChooser.getSelectedFile().toString()); // 清除前一次文件 textArea.setText(""); // 设定状态栏 stateBar.setText("未修改"); // 取得系统相依的换行字符 String lineSeparator = System.getProperty("line.separator"); // 读取文件并附加至文字编辑区 String text; while((text = buf.readLine()) != null) { textArea.append(text); textArea.append(lineSeparator); } buf.close(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "开启文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFile() { // 从标题栏取得文件名称 File file = new File(getTitle()); // 若指定的文件不存在 if(!file.exists()) { // 执行另存为 saveFileAs(); } else { try { // 开启指定的文件 BufferedWriter buf = new BufferedWriter( new FileWriter(file)); // 将文字编辑区的文字文件 buf.write(textArea.getText()); buf.close(); // 设定状态栏为未修改 stateBar.setText("未修改"); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFileAs() { // 显示文件对话框 int option = fileChooser.showSaveDialog(null); // 如果确认选取文件 if(option == JFileChooser.APPROVE_OPTION) { // 取得选择的文件 File file = fileChooser.getSelectedFile(); // 在标题栏上设定文件名称 setTitle(file.toString()); try { // 建立文件 file.createNewFile(); // 进行文件保存 saveFile(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "无法建立新文件", JOptionPane.ERROR_MESSAGE); } } } private void closeFile() { // 是否已保存文件 if(isCurrentFileSaved()) { // 释放窗口资源,而后关闭程序 dispose(); } else { int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { case JOptionPane.YES_OPTION: saveFile(); break; case JOptionPane.NO_OPTION: dispose(); } } } private void cut() { textArea.cut(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void copy() { textArea.copy(); popUpMenu.setVisible(false); } private void paste() { textArea.paste(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void processTextArea() { stateBar.setText("已修改"); } public static void main(String[] args) { new JNotePadUI(); } }
好的,以下是一个简单的Java记事本程序,你可以根据自己的需求进行修改和完善: ```java import java.awt.*; import java.awt.event.*; import java.io.*; public class MyNotepad extends Frame implements ActionListener { private TextArea textArea; private MenuBar menuBar; private Menu fileMenu; private MenuItem newMenuItem; private MenuItem openMenuItem; private MenuItem saveMenuItem; private MenuItem exitMenuItem; private File file; public MyNotepad() { super("MyNotepad"); textArea = new TextArea(); add(textArea); menuBar = new MenuBar(); fileMenu = new Menu("File"); newMenuItem = new MenuItem("New"); openMenuItem = new MenuItem("Open"); saveMenuItem = new MenuItem("Save"); exitMenuItem = new MenuItem("Exit"); fileMenu.add(newMenuItem); fileMenu.add(openMenuItem); fileMenu.add(saveMenuItem); fileMenu.addSeparator(); fileMenu.add(exitMenuItem); menuBar.add(fileMenu); setMenuBar(menuBar); newMenuItem.addActionListener(this); openMenuItem.addActionListener(this); saveMenuItem.addActionListener(this); exitMenuItem.addActionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setSize(600, 400); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == newMenuItem) { textArea.setText(""); file = null; } else if (e.getSource() == openMenuItem) { FileDialog fd = new FileDialog(this, "Open", FileDialog.LOAD); fd.setVisible(true); if (fd.getFile() != null) { file = new File(fd.getDirectory(), fd.getFile()); try { BufferedReader br = new BufferedReader(new FileReader(file)); String line; textArea.setText(""); while ((line = br.readLine()) != null) { textArea.append(line + "\n"); } br.close(); } catch (IOException ex) { ex.printStackTrace(); } } } else if (e.getSource() == saveMenuItem) { if (file == null) { FileDialog fd = new FileDialog(this, "Save", FileDialog.SAVE); fd.setVisible(true); if (fd.getFile() != null) { file = new File(fd.getDirectory(), fd.getFile()); } } if (file != null) { try { BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(textArea.getText()); bw.close(); } catch (IOException ex) { ex.printStackTrace(); } } } else if (e.getSource() == exitMenuItem) { System.exit(0); } } public static void main(String[] args) { new MyNotepad(); } } ``` 这个记事本程序提供了新建打开、保存和退出四个功能,可以满足基本的记事本需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值