日记本编辑器(控制台程序)

日记本编辑器(控制台程序)

预期功能

  • 日记本文件(.txt)的创建
  • 目录文件的列出显示
  • 日记本文件的选择打开
  • 日记本文件的编辑(添加新日记)和保存
  • 日记本内容的显示
  • 日记本文件的删除

废话不多说,先贴代码

Diary.java

//日记本程序
//已知问题:使用VScode在记事本中无法写入中文
//问题已解决2021.05.04

package h428_2;//这里改为你自己的包
import java.io.*;
import java.util.Scanner;

public class Diary {
    
    
    public static void main(String[] args)throws IOException {
    
    
        //参数定义
        Scanner keybord=new Scanner(System.in);//方便输入int型数据
        File f=null;//文件
        BufferedWriter input=null;//输入流
        int order;//指令选择
        String filename=null;//文件名
        String path="F://NEKO/Code/VS Code/Java/Homework/h428_2/File";//日记本保存目录
        File dir=new File(path);//目标目录
        FileAccept fa=new FileAccept();
        fa.setExtendName("txt");//目标扩展名
        String choose;//打开和删除文件的选择文件名
        
        //执行体
        while(true){
    
    
            System.out.print("\n请输入指令:\n"
            +"1:创建记事本;2:打开日记本;3:编辑日记本;4:保存日记本;5:关闭日记本;6:删除日记本\n"
            +"(输入0退出程序)  _>");
            order=keybord.nextInt();
            
            if(order==0)break;//输入0跳出循环(退出程序)
            if(order==1){
    
    //创建
                System.out.print("请输入文件名>");
                filename=null;
                filename=keybord.next();
                f=new File(path,filename);
                if(!f.exists()){
    
    
                    f.createNewFile();
                    System.out.println("日记本 "+filename+" 创建成功");
                }
                else System.out.println("同名文件已存在");
            }
            if(order==2){
    
    //打开
                //给出当前文件列表
                String s[]=dir.list(fa);
                System.out.println("当前文件目录:");
                if(s.length==0)System.out.println("(空目录)");
                else{
    
    
                    for(String name:s){
    
    
                        System.out.println(name);
                    }
                    //询问打开文件
                    System.out.print("需要打开的日记本为>");
                    choose=keybord.next();
                    f=new File(path,choose);
                    if(!f.exists()){
    
    
                        System.out.println("日记本不存在,重新输入");
                        input=null;
                    }
                    else{
    
    
                        OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(f,true),"UTF-8");//设置新内容追加或覆盖true为追加,设置格式
                        input=new BufferedWriter(osw);
                        //BufferedWriter input=new BufferedWriter(new FileWriter(f,true));
                        if(input!=null)System.out.println("日记本已打开");
                    }
                }
            }
            if(order==3){
    
    //修改
                //如果日记本未打开给出提示
                if(input==null){
    
    
                    System.out.println("日记本未打开,请先打开日记本");
                }
                else{
    
    
                    //读取当前日记本内容
                    System.out.println("当前日记本内容为:");
                    InputStreamReader isr = new InputStreamReader(new FileInputStream(f),"UTF-8");//设置文件读取格式
                    BufferedReader output=new BufferedReader(isr);
                    //BufferedReader output=new BufferedReader(new FileReader(f));
                    String s=null;
                    if(f.length()==0) System.out.println("(空文件)");
                    while((s=output.readLine())!=null){
    
    
                        System.out.println(s);
                    }
                    output.close();
                    System.out.println("\n请输入内容(输入\"//\"结束)>");
                    while(true){
    
    
                        String in=keybord.nextLine();
                        if("//".equals(in)) break;
                        input.write(in);
                        input.newLine();
                        //input.flush();//这里把刷新保存做到了功能四里,所以注释掉了
                    }
                   System.out.println("写入完毕");
                }
            }
            if(order==4){
    
    //保存
                if(input==null) System.out.println("日记本未打开,请先打开日记本");
                else{
    
    
                    input.flush();
                    System.out.println("日记本已保存");
                }
            }
            if(order==5){
    
    //关闭
                if(input==null) System.out.println("日记本未打开,请先打开日记本");
                else{
    
    
                    input.close();
                    input=null;
                    System.out.println("日记本已关闭");
                }
            }
            if(order==6){
    
    //删除
                String s[]=dir.list(fa);
                System.out.println("当前文件目录:");
                if(s.length==0)System.out.println("(空目录)");
                else{
    
    
                    for(String name:s){
    
    
                        System.out.println(name);
                    }
                }
                //询问删除文件
                System.out.print("需要删除的日记本为>");
                filename=null;
                choose=keybord.next();
                f=new File(path,choose);
                if(!f.exists())System.out.println("日记本不存在,重新输入");
                else{
    
    
                    if(input!=null) input.close();//需要先关闭再删除,不然会因为占用而删除失败
                    f.delete();
                    f=null;
                    System.out.println("日记本已删除");
                }
            }
            //else{
    
    
            //    System.out.println("指令不存在,重新输入");
            //}
        }
        keybord.close();
    }
}

FileAccept.java

package h428_2;//这里改为你自己的包
import java.io.*;

public class FileAccept implements FilenameFilter{
    
    
    private String extendName;
            public void setExtendName(String s){
    
    
                extendName="."+s;
            }
            public boolean accept(File dir,String name){
    
    
                return name.endsWith(extendName);
            }
}

注意事项

  • 每次写完新内容都需要手动保存,即运行完指令3后需要运行指令4才会把内容写入日记本,这样做的目的仅仅是完成要求的保存功能,如想在编辑后自动保存就把代码中下列语句的注释去掉

//input.flush();//这里把刷新保存做到了功能四里,所以注释掉了

  • 使用时将Diary.java代码中参数定义的下列语句修改,将目录改为你想要保存日记本文件的目录(目录必须存在,本程序不自动创建目录)

String path=“F://NEKO/Code/VS Code/Java/Homework/h428_2/File”;//日记本保存目录

下面是运行截图
程序执行情况1
执行到这一步,我们来看一下日记本的内容
日记本内容1可以发现第二次输入的内容 【第二次输入】并没有被写入,这是因为第二次输入完成后没有执行指令4,所以本次输入内容未保存到日记本中,下图为重新执行指令4之后的日记本内容和文件夹内的文件。
保存后的日记本文件夹内容
接下来我们继续执行其他指令
继续执行程序可以看到我们关闭日记本后是无法执行编辑和保存操作的,当然再次关闭也不行,程序都会给出提示【还未打开日记本】。接下来执行指令6来删除日记本。
删除日记本的操作删除日记本后的文件夹内容
可以看到文件04.txt已经被删除,至此程序测试完毕。

猜你喜欢

转载自blog.csdn.net/NEKOic/article/details/116654284