• 利用集合和文件的系列,反系列化模拟实现数据的存储功能


    package com.manage.tset;

    import java.io.File;
    import java.util.ArrayList;

    public interface IManageNewsInfo {

    //显示所有的新闻的信息的方法
    ArrayList<NewsInfo> showAllNews() throws Exception;

    //实现添加新闻的方法
    void addNews(NewsInfo news) throws Exception;

    //删除新闻的方法
    boolean deleteNews(int newsId) throws Exception;

    }

    ////////////////////////////////////////接口//////////////////////////////////////////////

    package com.manage.tset;

    import java.io.Serializable;
    import java.util.Date;

    public class NewsInfo implements Serializable{
    private Integer newsId;//新闻编号
    private String newsTitle;//新闻标题
    private String newsContent;//新闻内容
    private String newsDate;//发布时间

    //获得getXxx和setXxx方法
    public Integer getNewsId() {
    return newsId;
    }
    public void setNewsId(Integer newsId) {
    this.newsId = newsId;
    }
    public String getNewsTitle() {
    return newsTitle;
    }
    public void setNewsTitle(String newsTitle) {
    this.newsTitle = newsTitle;
    }
    public String getNewsContent() {
    return newsContent;
    }
    public void setNewsContent(String newsContent) {
    this.newsContent = newsContent;
    }
    public String getNewsDate() {
    return newsDate;
    }
    public void setNewsDate(String newsDate) {
    this.newsDate = newsDate;
    }
    public NewsInfo(Integer newsId, String newsTitle, String newsContent,
    String newsDate) {

    this.newsId = newsId;
    this.newsTitle = newsTitle;
    this.newsContent = newsContent;
    this.newsDate = newsDate;
    }
    @Override
    public String toString() {
    return "NewsInfo [newsId=" + newsId + ", newsTitle=" + newsTitle
    + ", newsContent=" + newsContent + ", newsDate=" + newsDate
    + "]";
    }
    }

    /////////////////////////////实现接口类///////////////////////////////////////////////////////////////

    package com.manage.tset;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;

    /*
    * 业务管理类
    * 1.主要是实现接口中的方法
    * 2.管理业务实现
    * 3.要把集合的对象系列化到文件中,再通过反系列化从文件中取出来
    * */
    public class MamageNewsInfo implements IManageNewsInfo{
    static File newsFile = new File("E:\manage\news.txt");
    ArrayList<NewsInfo> list = new ArrayList<NewsInfo>();//定义一个集合
    static{
    /*
    * 静态代码块主要用于类的初始化。它只执行一次,并在main函数之前执行。
    静态代码块的特点主要有:
    静态代码块会在类被加载时自动执行。
    静态代码块只能定义在类里面,不能定义在方法里面。
    静态代码块里的变量都是局部变量,只在块内有效。
    一个类中可以定义多个静态代码块,按顺序执行。
    静态代码块只能访问类的静态成员,而不允许访问实例成员。
    * */
    //创建文件,在这里要用static括起来,否则会出错,因为还没有在内存中分配内存就开始用就会报错
    File file = new File("E:\manage");
    if(!file.exists()){//判断文件是否存在,不存在则创建
    file.mkdirs();
    }
    // newsFile = new File("E:\manage\news.txt");
    if(!newsFile.exists()){//判断文件是否存在,不存在则创建
    try {
    newsFile.createNewFile();
    //当没有文件的时候,把空的集合系列化到文件中去,在反系列化出来,只加载一次,当有文件存在的时候,不再又把空的系列化到文件中去了
    new MamageNewsInfo().reserializable(newsFile,new MamageNewsInfo().list);//系列化一个空的集合到文件中去
    //ArrayList list = new MamageNewsInfo().deserializable(newsFile);//反系列化集合
    } catch ( Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    // try {
    // new MamageNewsInfo().reserializable(newsFile,new MamageNewsInfo().list);
    // ArrayList list = new MamageNewsInfo().deserializable(newsFile);
    // } catch (Exception e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // }//调用系列化的方法
    }
    //定义一个集合

    //NewsInfo news = new NewsInfo();
    /* (non-Javadoc)
    * @see com.manage.tset.IManageNewsInfo#showAllNews()
    */
    //显示所有的新闻的信息的方法
    public ArrayList<NewsInfo> showAllNews() throws Exception{
    /**
    //创建一个输出低级流
    OutputStream os = new FileOutputStream("E:\manage\news.txt");
    //创建一个系列化输出流,把一个空集合系列化
    ObjectOutputStream oos = new ObjectOutputStream(os);
    oos.writeObject(list);
    */
    //reserializable(newsFile,list);//调用系列化的方法
    /**
    //定义一个输入低级流
    InputStream is = new FileInputStream("E:\manage\news.txt");
    //创建一个反系列输入流,反系列文件中的集合对象
    ObjectInputStream ois = new ObjectInputStream(is);
    //把文件中的内容反系列出来,并且强制转换为NewsInfo对象
    ArrayList<NewsInfo> list =( ArrayList<NewsInfo>) ois.readObject();
    */
    ArrayList<NewsInfo> list = deserializable(newsFile);//调用反系列化的方法,并且返回一个ArrayList类型的集合
    if(!list.isEmpty()){
    // for (NewsInfo news : list) {
    // System.out.println(news.getNewsId()+" "+news.getNewsTitle()+" "+news.getNewsContent()+" "+news.getNewsDate());
    // }
    reserializable(newsFile,list);//调用系列化的方法
    return list;


    }else{
    //System.out.println("现在还没有任何新闻信息");
    return null;
    }

    }

    //实现添加新闻的方法
    /* (non-Javadoc)
    * @see com.manage.tset.IManageNewsInfo#addNews(com.manage.tset.NewsInfo, java.io.File)
    */
    /**添加新闻,
    * 1.首先先把调用反系列化的方法,把集合反系列化出来,
    * 2.再把对象添加到集合中,
    * 3.在通过系列化把集合系列化到文件中
    * 注:反系列化出来是为了不让后面的内容覆盖前面的内容
    * @throws Exception
    */
    public void addNews(NewsInfo news) throws Exception{
    ArrayList<NewsInfo> li = deserializable(newsFile);//把集合反系列化出来,
    li.add(news);
    //System.out.println(li);测试是否把对象添加到集合中
    reserializable(newsFile,li);//调用系列化的方法,再把集合系列化到文件中去
    /*
    * 反系列化出来看集合是否存入到了文件中,
    ArrayList<NewsInfo> list = deserializable(newsFile);

    for (NewsInfo j :list) {
    System.out.println(news.getNewsId()+" "+news.getNewsTitle()+" "+news.getNewsContent()+" "+news.getNewsDate());
    }
    */
    }

    //删除新闻的方法
    /* (non-Javadoc)
    * @see com.manage.tset.IManageNewsInfo#deleteNews(int)
    *
    * 1.通过反系列化,把集合拿出来
    * 2.通过循环比较,看是否有和该新闻编号相同的新闻
    * 3,如何有,则删除,没有则输出没有找到
    */
    public boolean deleteNews(int newsId) throws Exception{
    //boolean flag=false;
    ArrayList<NewsInfo> li = deserializable(newsFile);//把集合反系列化出来,并且用一个ArrayList接收
    if(!li.isEmpty()){
    for (NewsInfo lt :li) {
    if(lt.getNewsId().intValue()==newsId){//如果集合中存在和输入的编号相等,则删除
    li.remove(lt);
    //再把集合系列化到文件中
    reserializable(newsFile,li);//调用系列化的方法,再把集合系列化到文件中去
    //flag = true;
    return true;
    }
    }
    }
    //else{
    //System.out.println("还没有你要删除的新闻信息");
    //return false;
    //}
    return false;
    }

    //定义一个系列化的方法
    private void reserializable(File file ,ArrayList<NewsInfo> list) throws Exception{

    //创建一个输出低级流
    OutputStream os = new FileOutputStream(file);
    //创建一个系列化输出流,把一个空集合系列化
    ObjectOutputStream oos = new ObjectOutputStream(os);
    oos.writeObject(list);
    oos.flush();
    oos.close();
    }

    //定义一个反系列化方法
    private ArrayList<NewsInfo> deserializable(File file) throws Exception{
    //定义一个输入低级流
    InputStream is = new FileInputStream(file);
    //创建一个反系列输入流,反系列文件中的集合对象
    ObjectInputStream ois = new ObjectInputStream(is);
    //把文件中的内容反系列出来,并且强制转换为NewsInfo对象
    ArrayList<NewsInfo> list =( ArrayList<NewsInfo>) ois.readObject();
    ois.close();
    return list;
    }
    }

    ///////////////////////////////业务实现类///////////////////////////////////////////

    package com.manage.tset;

    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Scanner;

    /*
    * 测试新闻管理系统类
    * */
    public class NewsInfoTest {
    public static void main(String[] args) {
    MamageNewsInfo mio = new MamageNewsInfo();
    NewsInfo nif ;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    //创建一个扫描器
    Scanner sc = new Scanner(System.in);
    System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<欢迎使用新闻管理系统终极版>>>>>>>>>>>>>>>>>>>>>>>");
    while(true){
    System.out.println("1.查询新闻");
    System.out.println("2.添加新闻");
    System.out.println("3.删除新闻");
    System.out.println("0.退出系统");
    System.out.println("请选择功能(1,2,3,0)");
    int number = sc.nextInt();
    System.out.println("新闻内容如下:");
    System.out.println("==========================================================");
    System.out.println("编号"+" 标题"+" 内容"+" 时间");
    switch(number){
    case 1:

    try {
    ArrayList<NewsInfo> list = mio.showAllNews();
    if( list != null){
    for (NewsInfo news : list) {
    System.out.println(news.getNewsId()+" "+news.getNewsTitle()+" "+news.getNewsContent()+" "+news.getNewsDate());
    }
    }else{
    System.out.println("现在还没有任何新闻信息");
    }
    } catch (Exception e) {
    //由于这里是main方法里,属于最高层,在这里出现异常只能出来,不能抛throws
    System.out.println("查询新闻失败!!!");
    e.printStackTrace();
    }
    break;
    case 2:
    // NewsInfo news = new NewsInfo();
    System.out.println("请输入新闻编号:");
    Integer newsId = sc.nextInt();
    sc.nextLine();
    System.out.println("请输入新闻标题:");
    String newsTitle = sc.nextLine();
    System.out.println("请输入新闻内容:");
    String newsContent = sc.nextLine();
    //System.out.println("请输入新闻发布时间");
    // String date = sc.nextLine();
    Date date = new Date();
    nif= new NewsInfo(newsId,newsTitle,newsContent,sdf.format(date));
    try {
    mio.addNews(nif);
    System.out.println("添加成功!!!");
    } catch (Exception e) {
    System.out.println("添加失败!!!");
    e.printStackTrace();
    }
    break;
    case 3:
    System.out.println("请输入你要删除的编号:");
    Integer newsNumber = sc.nextInt();

    try {
    boolean flag = mio.deleteNews(newsNumber);
    if(flag){
    System.out.println("删除成功!!!");
    }else{
    System.out.println("删除失败!!!");
    }

    } catch (Exception e) {
    System.out.println("删除时出现异常,失败!!!");
    e.printStackTrace();
    }
    break;
    case 0://退出系统
    System.out.println("谢谢使用本新闻管理系统,欢迎下次光临!!!");
    sc.close();
    System.exit(0);
    break;
    }
    System.out.println("==========================================================");
    }
    }
    }

    ////////////////////////////////////测试类/////////////////////////////////////////////

  • 相关阅读:
    linux中断子系统
    注释规范
    linux下C获取文件的大小
    oracle 11g 修改内存示例
    联想system sr650安装windows
    iphone 手机音乐制作
    canon dpp 编辑相机raw软件
    浪潮nf5270m5 安装2012
    三种刻录工具及用法
    centos7.5 连接存储配置iscsi
  • 原文地址:https://www.cnblogs.com/wanglu1991/p/4584211.html
Copyright © 2020-2023  润新知