预览效果图:

背景介绍:

编写一个模拟记事本的程序通过在控制台输入指令,实现在本地新建文件打开文件和修改文件等功能。

要求在程序中:

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

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

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

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

  指令5代表退出系退出本系统,例如输入指令1之后输入内容再输入指令4和文件保存的路径,此时可将输入内容保存至指定的路径。

  输入指令2之后,输入想要查看的文件的路径,在输入指令3以及要修改内容,再输入指令4,此时完成指定路径下的文件的修改.

  

示例代码:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;import org.junit.Test;/*** Date:2018-05-14* @author Mryang* 思路分析:1. 根据任务介绍和运行结果分析可知,此任务需要创建一个记事本类,在类中可以使用while循环实现控制台中操作指令的多次输入,使用switch语句根据控制台输入的操作指令来判断执行什么操作。2. 输入指令1时进行新建文件操作,此时需要从控制台获取输入内容,并暂存到全局变量中,以便后期进行保存和修改内容时使用,可以使用StringBuffer来保存控台中的每次输入的内容,输入内容是可能会涉及换行,这里使用while循环来循环输入,每循环一次可以将控制台获取的内容进行拼接换行符后,追加到文本内容中,当内容中输入“stop”字符串时,需要文本内容的操作结束,并将新建文本的内容暂存在全局变量中。3.执行指令2时可以打开指定路径的文件,由于是模拟记事本程序,因此限定词功能只可以打开txt文件,此操作首先要获取输入的路径,判断此路径的文件是否是txt文件,如果是则通过字符流读取此文件,然后将此文件的内容打印到控制台,并且暂存在全局变量中,将文件的路径也保存在全局变量中。4. 执行指令3时,可以对暂存在全局变量中的文本内容进行修改,修改后的内容也需要暂存到全局变量中,此操作首先要判断一下修改之前是否先经过新建文件或者打开文件操作,当确认经过上述操作后,可以将输入的字符串与文本内容中目标字符串进行替换,来完成修改内容功能。修改过程中,可以通过while循环来进行多次修改,当捕捉到“stop”字符串时,修改结束并将修改后的内容暂存到全局变量中。5. 执行指令4时,将所有全局变量中的内容保存到本地,如果是新建的文件则保存到用户输入的路径,如果是打开后的文件,则将原文件覆盖,可以通过文件路径的全局变量判断是哪种保存方式。当是打开文件的方式是直接通过字符流写入,当是新建的文件是先获取用户输入的路径,再用字符流写入6. 执行指令5时,直接退出系统,可以通过代码System.exit(0)实现。*/
public class Notepad {private  String filePath;private  String message;@Testpublic  void notepadTest() throws Exception {Scanner scanner = new Scanner(System.in);System.out.println("------------1.新建文件    2.打开文件    3.修改文件    4.保存文件    5.退出系统-----------");while (true) {System.out.println("请输入操作命令:");int command = scanner.nextInt();switch (command) {case 1:createFile();break;case 2:openFile();break;case 3:editFile();break;case 4:saveFile();break;case 5:exit();break;default:System.out.println("您输入的命令有误!");break;}}}/*** 退出系统*/private static void exit() {System.out.println("您已经退出系统");System.exit(0);}/*** 修改文件: 通过字符串替换的形式 */private  void editFile() {if (message == "" && filePath == null) {System.out.println("请先新建文件或者打开文件");return;}Scanner scan = new Scanner(System.in);System.out.println("请输入要修改的内容(以\"修改的目标文字:修改之后的文字\"格式),"+"停止修改请输入\"stop\"");//提示String inputMessage = "";while (!inputMessage.equals("stop")) {//当输入“stop”时,停止输入inputMessage = scan.nextLine();if (inputMessage != null && inputMessage.length() > 0) {String[] editMessage = inputMessage.split(":");if (editMessage != null && editMessage.length > 1) {message = message.replace(editMessage[0],editMessage[1]);}}}System.out.println("修改后的内容:" + "\r\n" + message);}/*** 打开文件* @throws Exception */private  void openFile() throws Exception {message  = "";Scanner scan = new Scanner(System.in);System.out.println("请输入打开文件的位置:");filePath = scan.next();//控制只能输入txt格式文件路径if (filePath != null && !filePath.endsWith(".txt")) {System.out.print("请选择文本文件!");
//            System.out.println(222);return;}FileReader  in = new  FileReader(filePath);//实例化一个FileReader对象char[] charArray = new char[1024];//缓冲数组int len = 0;StringBuffer sb  = new StringBuffer();//循环读取  一次读取一个字符数组while ((len  = in.read(charArray)) != -1) {sb.append(charArray);}message = sb.toString();System.out.println("打开文件内容:" + "\r\n" + message);in.close();}/*** 新建文件:从控制台中获取文件*/private  void createFile() {message = "";//新建文件时,暂存的文件清空Scanner scanner = new Scanner(System.in);System.out.println("请输入内容,停止请输入stop :");StringBuffer stringBuffer = new StringBuffer();String inputMessage = "";//用于存储客户输入的数据while (!inputMessage.equals("stop")) {//当输入stop时。停止输入if (stringBuffer.length()>0) {//如果有内容stringBuffer.append("\r\n");//追加换行符
            }stringBuffer.append(inputMessage);//拼接输入的信息inputMessage= scanner.nextLine();}message = stringBuffer.toString();}/***  保存文件* @throws IOException*/private  void saveFile() throws IOException {Scanner scan =  new Scanner(System.in);FileWriter out = null ;if (filePath != null) {//文件是有“打开”载入out = new  FileWriter(filePath);//将原文件覆盖}else{//新建的文件System.out.println("请输入文件保存的绝对路径");String path = scan.next();//获取文件保存的路径filePath = path;//将输入路径中大写字母替换成小写字母后判断是不是文本格式if (!filePath.toLowerCase().endsWith(".txt")) {filePath += ".txt";}out = new FileWriter(filePath);//构造输出流
        }out.write(message);//写入暂存的内容out.close();    //  关闭输出流message ="";    //  修改文件前先将写入内容置空filePath = null;//  将文件路径置空
    }}

 
作者: 杨校

出处: http://www.cnblogs.com/xiaoxiao5016

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

杨老师课堂_Java核心技术下之控制台模拟记事本案例...相关推荐

  1. 杨老师课堂_Java核心技术下之控制台模拟文件管理器案例

    背景需求介绍: 编写一个模拟文件管理器的程序,实现控制台对文件和文件夹的管理操作. 要求在此程序中: 当用户输入指令 1 时,代表"指定关键字检索文件",此时需要用户输入检索的目录 ...

  2. java模仿微博代码_杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例

    案例设计背景介绍: 编写一个新浪微博用户注册的程序,要求使用HashSet集合实现. 假设当用户输入用户名.密码.确认密码.生日(输入格式yyyy-mm-dd为正确).手机号码(手机长度为11位,并且 ...

  3. 杨老师课堂_Java教程第一篇之认识计算机

    1了解计算机基础知识之计算机概述 A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备. ...

  4. 杨老师课堂_Java教程第五篇之函数运用

    今天主要是讲解以下知识点: 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法(函数)* 提高代码的复用性 * B: 什么是方法* 完成特定功能的代码块. 02 ...

  5. 杨老师课堂_Java教程第六篇之引用数据类型_类的运用

    今天主要是讲解以下知识点: 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.王者荣耀随机迎战案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 ...

  6. 杨老师课堂_Java教程第四篇之数组运用

    今天主要是讲解以下知识点: 1.流程控制语句switch 2.数组 3.王者荣耀英雄随机出战案例 01switch语句解构 * A:switch语句解构* a:switch只能针对某个表达式的值作出判 ...

  7. 杨老师课堂之JavaScript定时器限时抢购秒杀商品案例

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/kese7952/article/details/80346509 预览效果图: 使用到的知识点: 定 ...

  8. 杨老师课堂之网页制作HTML的学习入门-含有案例

    网页制作入门 - Html的学习 本篇所授任务 网站信息页面案例 网站图片信息页面案例 网站友情链接页面案例 网站首页案例 网站注册页面案例 网站后台页面案例 教学导航 教学目标 了解什么是标记语言 ...

  9. 台州杨老师课堂 UI设计培训班

    课程内容 一.图形界面设计基础 1.Photoshop 应用 通过各种不同风格网页整体GUI设计,掌握photoshop相关软件操作基础,熟练使用更重要是学会直接应用软件,通过项目实训直接设计. 2. ...

最新文章

  1. Contextualizing Airbnb by Building Knowledge Graph
  2. Android 获取外网IP,实测有效
  3. Dev GridView 绑定Listlt;Tgt;、BindingList lt;Tgt;、BindingSource
  4. 个人或者企业怎么进行app开发?开发一款APP应用大概须要多少钱?
  5. 二级c语言题型分数,计算机二级C语言题型和评分标准
  6. 安卓是java ios c_如何为Android和iOS使用相同的C ++代码?
  7. NVIDIA专家全面解析Merlin,GPU加速的推荐系统解决方案速速查收
  8. git分布式版本管理系统和github平台
  9. atom编辑器 apm指令配置代理
  10. 记redis的一个测试
  11. 让chrome浏览器支持ajax跨域
  12. HDU 1277全文检索(字典树)
  13. docker安装php拓展
  14. 数学笔记25——弧长和曲面面积
  15. 全国高中数学联赛——组合
  16. Office的许可证不是正版弹框解决
  17. 国庆节发个国庆直播的小软件
  18. 更改谷歌浏览器的安装位置(此方法同样适用于把安在C盘的东西移到其它盘)
  19. 我裁完兄弟后,辞职了,转行做了一名小职员
  20. 笔记本linux蓝牙驱动怎么安装程序,如何安装蓝牙设备的驱动程序

热门文章

  1. php源码安全加密之PHP混淆算法.
  2. Http 请求头中的 Proxy-Connection
  3. 虚拟化--006 VCAC的sso配置成功
  4. 理解NSAttributedString
  5. 数据连接linux网络编程之TCP/IP基础(四):TCP连接的建立和断开、滑动窗口
  6. POJ-1753 Flip Game 枚举 状态压缩
  7. 发布开源框架到CocoaPods入坑指南
  8. Visual Studio 2017 - Windows应用程序打包成exe文件(1)- 工具简单总结
  9. Unity接入安卓sdk查看应用内存占用
  10. Centos+PHP模块+exif扩展 (第三方模块)